home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / share / doc / libslang2 / slangfun.txt < prev    next >
Text File  |  2008-09-02  |  239KB  |  9,495 lines

  1. all
  2.  
  3.  SYNOPSIS
  4.   Tests if all elements of an array are non-zero
  5.  
  6.  USAGE
  7.   Char_Type all (Array_Type a [,Int_Type dim])
  8.  
  9.  DESCRIPTION
  10.   The `all' function examines the elements of a numeric array and
  11.   returns 1 if all elements are non-zero, otherwise it returns 0. If a
  12.   second argument is given, then it specifies the dimension of the
  13.   array over which the function is to be applied.  In this case, the
  14.   result will be an array with the same shape as the input array minus
  15.   the specified dimension.
  16.  
  17.  EXAMPLE
  18.   Consider the 2-d array
  19.  
  20.       1       2       3       4        5
  21.       6       7       8       9       10
  22.  
  23.   generated by
  24.  
  25.       a = _reshape ([1:10], [2, 5]);
  26.  
  27.   Then `all(a)' will return 1, and `all(a>3, 0)' will return
  28.   a 1-d array
  29.  
  30.       [0, 0, 0, 1, 1]
  31.  
  32.   Similarly, `all(a>3, 1)' will return the 1-d array
  33.  
  34.       [0,1]
  35.  
  36.  
  37.  SEE ALSO
  38.   where, any
  39.  
  40. --------------------------------------------------------------
  41.  
  42. any
  43.  
  44.  SYNOPSIS
  45.   Test if any element of an array is non-zero
  46.  
  47.  USAGE
  48.   Char_Type any (Array_Type a [,Int_Type dim])
  49.  
  50.  DESCRIPTION
  51.   The `any' function examines the elements of a numeric array and
  52.   returns 1 if any element is both non-zero and not a NaN, otherwise
  53.   it returns 0.  If a second argument is given, then it specifies
  54.   the dimension of the array to be tested.
  55.  
  56.  EXAMPLE
  57.   Consider the 2-d array
  58.  
  59.       1       2       3       4        5
  60.       6       7       8       9       10
  61.  
  62.   generated by
  63.  
  64.       a = _reshape ([1:10], [2, 5]);
  65.  
  66.   Then `any(a==3)' will return 1, and `any(a==3, 0)'
  67.   will return a 1-d array with elements:
  68.  
  69.       0        0       1       0       0
  70.  
  71.  
  72.  SEE ALSO
  73.   where, all
  74.  
  75. --------------------------------------------------------------
  76.  
  77. array_info
  78.  
  79.  SYNOPSIS
  80.   Returns information about an array
  81.  
  82.  USAGE
  83.   (Array_Type, Integer_Type, DataType_Type) array_info (Array_Type a)
  84.  
  85.  DESCRIPTION
  86.   The `array_info' function returns information about the array `a'.
  87.   It returns three values: an 1-d integer array specifying the
  88.   size of each dimension of `a', the number of dimensions of
  89.   `a', and the data type of `a'.
  90.  
  91.  EXAMPLE
  92.   The `array_info' function may be used to find the number of rows
  93.   of an array:
  94.  
  95.     define num_rows (a)
  96.     {
  97.        variable dims, num_dims, data_type;
  98.  
  99.        (dims, num_dims, data_type) = array_info (a);
  100.        return dims [0];
  101.     }
  102.  
  103.  
  104.  SEE ALSO
  105.   typeof, array_info, array_shape, length, reshape, _reshape
  106.  
  107. --------------------------------------------------------------
  108.  
  109. array_map
  110.  
  111.  SYNOPSIS
  112.   Apply a function to each element of an array
  113.  
  114.  USAGE
  115.   Array_Type array_map (type, func, arg0, ...)
  116.  
  117.     DataType_Type type;
  118.     Ref_Type func;
  119.  
  120.  
  121.  DESCRIPTION
  122.   The `array_map' function may be used to apply a function to each
  123.   element of an array and returns the resulting values as an array of
  124.   the specified type.  The `type' parameter indicates what kind of
  125.   array should be returned and generally corresponds to the return
  126.   type of the function.  The `arg0' parameter should be an array
  127.   and is used to determine the dimensions of the resulting array.  If
  128.   any subsequent arguments correspond to an array of the same size,
  129.   then those array elements will be passed in parallel with the first
  130.   arrays arguments.
  131.  
  132.  EXAMPLE
  133.   The first example illustrates how to apply the `strlen' function
  134.   to an array of strings:
  135.  
  136.      S = ["", "Train", "Subway", "Car"];
  137.      L = array_map (Integer_Type, &strlen, S);
  138.  
  139.   This is equivalent to:
  140.  
  141.      S = ["", "Train", "Subway", "Car"];
  142.      L = Integer_Type [length (S)];
  143.      for (i = 0; i < length (S); i++) L[i] = strlen (S[i]);
  144.  
  145.  
  146.   Now consider an example involving the `strcat' function:
  147.  
  148.      files = ["slang", "slstring", "slarray"];
  149.  
  150.      exts = ".c";
  151.      cfiles = array_map (String_Type, &strcat, files, exts);
  152.      % ==> cfiles = ["slang.c", "slstring.c", "slarray.c"];
  153.  
  154.      exts =  [".a",".b",".c"];
  155.      xfiles = array_map (String_Type, &strcat, files, exts);
  156.      % ==> xfiles = ["slang.a", "slstring.b", "slarray.c"];
  157.  
  158.  
  159.  NOTES
  160.   Many mathematical functions already work transparantly on arrays.
  161.   For example, the following two statements produce identical results:
  162.  
  163.      B = sin (A);
  164.      B = array_map (Double_Type, &sin, A);
  165.  
  166.  
  167.  SEE ALSO
  168.   array_info, strlen, strcat, sin
  169.  
  170. --------------------------------------------------------------
  171.  
  172. array_reverse
  173.  
  174.  SYNOPSIS
  175.   Reverse the elements of an array
  176.  
  177.  USAGE
  178.   array_reverse (Array_Type a [,Int_Type i0, Int_Type i1] [,Int_Type dim])
  179.  
  180.  DESCRIPTION
  181.   In its simplest form, the `array_reverse' function reverses the
  182.   elements of an array.  If passed 2 or 4 arguments,
  183.   `array_reverse' reverses the elements of the specified
  184.   dimension of a multi-dimensional array.  If passed 3 or 4 arguments,
  185.   the parameters `i0' and `i1' specify a range of elements
  186.   to reverse.
  187.  
  188.  EXAMPLE
  189.   If `a' is a one dimensional array, then
  190.  
  191.     array_reverse (a, i, j);
  192.     a[[i:j]] = a[[j:i:-1]];
  193.  
  194.   are equivalent to one another.  However, the form using
  195.   `array_reverse' is about 10 times faster than the version that
  196.   uses explicit array indexing.
  197.  
  198.  SEE ALSO
  199.   array_swap, transpose
  200.  
  201. --------------------------------------------------------------
  202.  
  203. array_shape
  204.  
  205.  SYNOPSIS
  206.   Get the shape or dimensions of an array
  207.  
  208.  USAGE
  209.   dims = array_shape (Array_Type a)
  210.  
  211.  DESCRIPTION
  212.    This function returns an array representing the dimensionality or
  213.    shape of a specified array.  The `array_info' function also
  214.    returns this information but for many purposes the
  215.    `array_shape' function is more convenient.
  216.  
  217.  SEE ALSO
  218.   array_info, reshape
  219.  
  220. --------------------------------------------------------------
  221.  
  222. array_sort
  223.  
  224.  SYNOPSIS
  225.   Sort an array
  226.  
  227.  USAGE
  228.   Array_Type array_sort (Array_Type a [, String_Type or Ref_Type f])
  229.  
  230.  DESCRIPTION
  231.   `array_sort' sorts the array `a' into ascending order and
  232.   returns an integer array that represents the result of the sort. If
  233.   the optional second parameter `f' is present, the function
  234.   specified by `f' will be used to compare elements of `a';
  235.   otherwise, a built-in sorting function will be used.
  236.  
  237.   If `f' is present, then it must be either a string representing
  238.   the name of the comparison function, or a reference to the function.
  239.   The sort function represented by `f' must be a S-Lang function
  240.   that takes two arguments.  The function must return an integer that
  241.   is less than zero if the first parameter is considered to be less
  242.   than the second, zero if they are equal, and a value greater than
  243.   zero if the first is greater than the second.
  244.  
  245.   If the comparison function is not specified, then a built-in comparison
  246.   function appropriate for the data type will be used.  For example,
  247.   if `a' is an array of character strings, then the sort will be
  248.   performed using the `strcmp' function.
  249.  
  250.   The integer array returned by this function is simply an index array
  251.   that indicates the order of the sorted array.  The input array
  252.   `a' is not changed.
  253.  
  254.  EXAMPLE
  255.   An array of strings may be sorted using the `strcmp' function
  256.   since it fits the specification for the sorting function described
  257.   above:
  258.  
  259.      A = ["gamma", "alpha", "beta"];
  260.      I = array_sort (A, &strcmp);
  261.  
  262.   Alternatively, one may use
  263.  
  264.      variable I = array_sort (A);
  265.  
  266.   to use the built-in comparison function.
  267.  
  268.   After the `array_sort' has executed, the variable `I' will
  269.   have the values `[2, 0, 1]'.  This array can be used to
  270.   re-shuffle the elements of `A' into the sorted order via the
  271.   array index expression `A = A[I]'.  This operation may also be
  272.   written:
  273.  
  274.      A = A[array_sort(A)];
  275.  
  276.  
  277.  SEE ALSO
  278.   strcmp
  279.  
  280. --------------------------------------------------------------
  281.  
  282. array_swap
  283.  
  284.  SYNOPSIS
  285.   Swap elements of an array
  286.  
  287.  USAGE
  288.   array_swap (Array_Type a, Int_Type i, Int_Type j)
  289.  
  290.  DESCRIPTION
  291.   The `array_swap' function swaps the specified elements of an
  292.   array.  It is equivalent to
  293.  
  294.     (a[i], a[j]) = (a[j], a[i]);
  295.  
  296.   except that it executes several times faster than the above construct.
  297.  
  298.  SEE ALSO
  299.   array_reverse, transpose
  300.  
  301. --------------------------------------------------------------
  302.  
  303. cumsum
  304.  
  305.  SYNOPSIS
  306.   Compute the cumulative sum of an array
  307.  
  308.  USAGE
  309.   result = cumsum (Array_Type a [, Int_Type dim])
  310.  
  311.  DESCRIPTION
  312.   The `cumsum' function performs a cumulative sum over the
  313.   elements of a numeric array and returns the result.  If a second
  314.   argument is given, then it specifies the dimension of the array to
  315.   be summed over.  For example, the cumulative sum of
  316.   `[1,2,3,4]', is the array `[1,1+2,1+2+3,1+2+3+4]', i.e.,
  317.   `[1,3,6,10]'.
  318.  
  319.  SEE ALSO
  320.   sum
  321.  
  322. --------------------------------------------------------------
  323.  
  324. init_char_array
  325.  
  326.  SYNOPSIS
  327.   Initialize an array of characters
  328.  
  329.  USAGE
  330.   init_char_array (Array_Type a, String_Type s)
  331.  
  332.  DESCRIPTION
  333.   The `init_char_array' function may be used to initialize a
  334.   character array `a' by setting the elements of the array
  335.   `a' to the corresponding characters of the string `s'.
  336.  
  337.  EXAMPLE
  338.   The statements
  339.  
  340.      variable a = Char_Type [10];
  341.      init_char_array (a, "HelloWorld");
  342.  
  343.    creates an character array and initializes its elements to the
  344.    characters in the string `"HelloWorld"'.
  345.  
  346.  NOTES
  347.    The character array must be large enough to hold all the characters
  348.    of the initialization string.
  349.  
  350.  SEE ALSO
  351.   bstring_to_array, strlen, strcat
  352.  
  353. --------------------------------------------------------------
  354.  
  355. _isnull
  356.  
  357.  SYNOPSIS
  358.   Check an array for NULL elements
  359.  
  360.  USAGE
  361.   Char_Type[] = _isnull (a[])
  362.  
  363.  DESCRIPTION
  364.   This function may be used to test for the presence of NULL elements
  365.   of an array.   Specifically, it returns a Char_Type array of
  366.   with the same number of elements and dimensionality of the input
  367.   array.  If an element of the input array is NULL, then the
  368.   corresponding element of the output array will be set to 1,
  369.   otherwise it will be set to 0.
  370.  
  371.  EXAMPLE
  372.   Set all NULL elements of a string array `A' to the empty
  373.   string `""':
  374.  
  375.      A[where(_isnull(A))] = "";
  376.  
  377.  
  378.  NOTES
  379.   It is important to understand the difference between `A==NULL'
  380.   and `_isnull(A)'.  The latter tests all elements of `A'
  381.   against NULL, whereas the former only tests `A' itself.
  382.  
  383.  SEE ALSO
  384.   where, array_map
  385.  
  386. --------------------------------------------------------------
  387.  
  388. length
  389.  
  390.  SYNOPSIS
  391.   Get the length of an object
  392.  
  393.  USAGE
  394.   Integer_Type length (obj)
  395.  
  396.  DESCRIPTION
  397.   The `length' function may be used to get information about the
  398.   length of an object.  For simple scalar data-types, it returns 1.
  399.   For arrays, it returns the total number of elements of the array.
  400.  
  401.  NOTES
  402.   If `obj' is a string, `length' returns 1 because a
  403.   String_Type object is considered to be a scalar.  To get the
  404.   number of characters in a string, use the `strlen' function.
  405.  
  406.  SEE ALSO
  407.   array_info, array_shape, typeof, strlen
  408.  
  409. --------------------------------------------------------------
  410.  
  411. max
  412.  
  413.  SYNOPSIS
  414.   Get the maximum value of an array
  415.  
  416.  USAGE
  417.   result = max (Array_Type a [,Int_Type dim])
  418.  
  419.  DESCRIPTION
  420.   The `max' function examines the elements of a numeric array and
  421.   returns the value of the largest element.  If a second argument is
  422.   given, then it specifies the dimension of the array to be searched.
  423.   In this case, an array of dimension one less than that of the input array
  424.   will be returned with the corresponding elements in the specified
  425.   dimension replaced by the maximum value in that dimension.
  426.  
  427.  EXAMPLE
  428.   Consider the 2-d array
  429.  
  430.       1       2       3       4        5
  431.       6       7       8       9       10
  432.  
  433.   generated by
  434.  
  435.       a = _reshape ([1:10], [2, 5]);
  436.  
  437.   Then `max(a)' will return `10', and `max(a,0)' will return
  438.   a 1-d array with elements
  439.  
  440.       6       7       8       9       10
  441.  
  442.  
  443.  NOTES
  444.   This function ignores NaNs in the input array.
  445.  
  446.  SEE ALSO
  447.   min, maxabs, sum, reshape
  448.  
  449. --------------------------------------------------------------
  450.  
  451. maxabs
  452.  
  453.  SYNOPSIS
  454.   Get the maximum absolute value of an array
  455.  
  456.  USAGE
  457.   result = maxabs (Array_Type a [,Int_Type dim])
  458.  
  459.  DESCRIPTION
  460.   The `maxabs' function behaves like the `max' function
  461.   except that it returns the maximum absolute value of the array. That
  462.   is, `maxabs(x)' is equivalent to `max(abs(x)'. See the
  463.   documentation for the `max' function for more information.
  464.  
  465.  SEE ALSO
  466.   min, max, minabs
  467.  
  468. --------------------------------------------------------------
  469.  
  470. min
  471.  
  472.  SYNOPSIS
  473.   Get the minimum value of an array
  474.  
  475.  USAGE
  476.   result = min (Array_Type a [,Int_Type dim])
  477.  
  478.  DESCRIPTION
  479.   The `min' function examines the elements of a numeric array and
  480.   returns the value of the smallest element.  If a second argument is
  481.   given, then it specifies the dimension of the array to be searched.
  482.   In this case, an array of dimension one less than that of the input array
  483.   will be returned with the corresponding elements in the specified
  484.   dimension replaced by the minimum value in that dimension.
  485.  
  486.  EXAMPLE
  487.   Consider the 2-d array
  488.  
  489.       1       2       3       4       5
  490.       6       7       8       9       10
  491.  
  492.   generated by
  493.  
  494.       a = _reshape ([1:10], [2, 5]);
  495.  
  496.   Then `min(a)' will return `1', and `min(a,0)' will return
  497.   a 1-d array with elements
  498.  
  499.       1        2       3       4       5
  500.  
  501.  
  502.  NOTES
  503.   This function ignores NaNs in the input array.
  504.  
  505.  SEE ALSO
  506.   max, sum, reshape
  507.  
  508. --------------------------------------------------------------
  509.  
  510. minabs
  511.  
  512.  SYNOPSIS
  513.   Get the minimum absolute value of an array
  514.  
  515.  USAGE
  516.   result = minabs (Array_Type a [,Int_Type dim])
  517.  
  518.  DESCRIPTION
  519.   The `minabs' function behaves like the `min' function
  520.   except that it returns the minimum absolute value of the array. That
  521.   is, `minabs(x)' is equivalent to `min(abs(x)'. See the
  522.   documentation for the `min' function for more information.
  523.  
  524.  SEE ALSO
  525.   min, max, maxabs
  526.  
  527. --------------------------------------------------------------
  528.  
  529. _reshape
  530.  
  531.  SYNOPSIS
  532.   Copy an array to a new shape
  533.  
  534.  USAGE
  535.   Array_Type _reshape (Array_Type A, Array_Type I)
  536.  
  537.  DESCRIPTION
  538.   The `_reshape' function creates a copy of an array `A',
  539.   reshapes it to the form specified by `I' and returns the result.
  540.   The elements of `I' specify the new dimensions of the copy of
  541.   `A' and must be consistent with the number of elements `A'.
  542.  
  543.  EXAMPLE
  544.   If `A' is a `100' element 1-d array, a new 2-d array of
  545.   size `20' by `5' may be created from the elements of `A'
  546.   by
  547.  
  548.       B = _reshape (A, [20, 5]);
  549.  
  550.  
  551.  NOTES
  552.   The `reshape' function performs a similar function to
  553.   `_reshape'.  In fact, the `_reshape' function could have been
  554.   implemented via:
  555.  
  556.      define _reshape (a, i)
  557.      {
  558.         a = @a;     % Make a new copy
  559.         reshape (a, i);
  560.         return a;
  561.      }
  562.  
  563.  
  564.  SEE ALSO
  565.   reshape, array_shape, array_info
  566.  
  567. --------------------------------------------------------------
  568.  
  569. reshape
  570.  
  571.  SYNOPSIS
  572.   Reshape an array
  573.  
  574.  USAGE
  575.   reshape (Array_Type A, Array_Type I)
  576.  
  577.  DESCRIPTION
  578.   The `reshape' function changes the shape of `A' to have the
  579.   shape specified by the 1-d integer array `I'.  The elements of `I'
  580.   specify the new dimensions of `A' and must be consistent with
  581.   the number of elements `A'.
  582.  
  583.  EXAMPLE
  584.   If `A' is a `100' element 1-d array, it can be changed to a
  585.   2-d `20' by `5' array via
  586.  
  587.       reshape (A, [20, 5]);
  588.  
  589.   However, `reshape(A, [11,5])' will result in an error because
  590.   the `[11,5]' array specifies `55' elements.
  591.  
  592.  NOTES
  593.   Since `reshape' modifies the shape of an array, and arrays are
  594.   treated as references, then all references to the array will
  595.   reference the new shape.  If this effect is unwanted, then use the
  596.   `_reshape' function instead.
  597.  
  598.  SEE ALSO
  599.   _reshape, array_info, array_shape
  600.  
  601. --------------------------------------------------------------
  602.  
  603. sum
  604.  
  605.  SYNOPSIS
  606.   Sum over the elements of an array
  607.  
  608.  USAGE
  609.   result = sum (Array_Type a [, Int_Type dim])
  610.  
  611.  DESCRIPTION
  612.   The `sum' function sums over the elements of a numeric array and
  613.   returns its result.  If a second argument is given, then it
  614.   specifies the dimension of the array to be summed over.  In this
  615.   case, an array of dimension one less than that of the input array
  616.   will be returned.
  617.  
  618.   If the input array is an integer type, then the resulting value will
  619.   be a Double_Type.  If the input array is a Float_Type,
  620.   then the result will be a Float_Type.
  621.  
  622.  EXAMPLE
  623.   The mean of an array `a' of numbers is
  624.  
  625.     sum(a)/length(a)
  626.  
  627.  
  628.  SEE ALSO
  629.   cumsum, transpose, reshape
  630.  
  631. --------------------------------------------------------------
  632.  
  633. transpose
  634.  
  635.  SYNOPSIS
  636.   Transpose an array
  637.  
  638.  USAGE
  639.   Array_Type transpose (Array_Type a)
  640.  
  641.  DESCRIPTION
  642.   The `transpose' function returns the transpose of a specified
  643.   array.  By definition, the transpose of an array, say one with
  644.   elements `a[i,j,...k]' is an array whose elements are
  645.   `a[k,...,j,i]'.
  646.  
  647.  SEE ALSO
  648.   _reshape, reshape, sum, array_info, array_shape
  649.  
  650. --------------------------------------------------------------
  651.  
  652. where
  653.  
  654.  USAGE
  655.   Array_Type where (Array_Type a [, Ref_Type jp])
  656.  
  657.  DESCRIPTION
  658.   The `where' function examines a numeric array `a' and
  659.   returns an integer array giving the indices of `a'
  660.   where the corresponding element of `a' is non-zero.  The
  661.   function accepts an optional Ref_Type argument that will be
  662.   set to complement set of indices, that is, the indices where
  663.   `a' is zero.  In fact
  664.  
  665.      i = where (a);
  666.      j = where (not a);
  667.  
  668.   and
  669.  
  670.      i = where (a, &j);
  671.  
  672.   are equivalent, but the latter form is prefered since it executes
  673.   about twice as fast as the former.
  674.  
  675.   Although this function may appear to be simple or even trivial, it
  676.   is arguably one of the most important and powerful functions for
  677.   manipulating arrays.
  678.  
  679.  EXAMPLE
  680.   Consider the following:
  681.  
  682.     variable X = [0.0:10.0:0.01];
  683.     variable A = sin (X);
  684.     variable I = where (A < 0.0);
  685.     A[I] = cos (X) [I];
  686.  
  687.   Here the variable `X' has been assigned an array of doubles
  688.   whose elements range from `0.0' through `10.0' in
  689.   increments of `0.01'.  The second statement assigns `A' to
  690.   an array whose elements are the `sin' of the elements of `X'.
  691.   The third statement uses the `where' function to get the indices of
  692.   the elements of `A' that are less than 0.  Finally, the
  693.   last statement replaces those elements of `A' by the cosine of the
  694.   corresponding elements of `X'.
  695.  
  696.  NOTES
  697.   Support for the optional argument was added to version 2.1.0.
  698.  
  699.  SEE ALSO
  700.   wherefirst, wherelast, wherenot, array_info, array_shape, _isnull
  701.  
  702. --------------------------------------------------------------
  703.  
  704. wherenot
  705.  
  706.  SYNOPSIS
  707.   Get indices where a numeric array is 0
  708.  
  709.  USAGE
  710.   Array_Type wherenot (Array_Type)
  711.  
  712.  DESCRIPTION
  713.   This function is equivalent to `where(not a)'.  See the
  714.   documentation for `where' for more information.
  715.  
  716.  SEE ALSO
  717.   where, wherefirst, wherelast
  718.  
  719. --------------------------------------------------------------
  720.  
  721. wherefirst
  722.  
  723.  SYNOPSIS
  724.   Get the index of the first non-zero array element
  725.  
  726.  USAGE
  727.   Int_Type wherefirst (Array_Type a [,start_index])
  728.  
  729.  DESCRIPTION
  730.   The `wherefirst' function returns the index of the first
  731.   non-zero element of a specified array.  If the optional parameter
  732.   `start_index' is given, the search will take place starting
  733.   from that index.  If a non-zero element is not found, the function
  734.   will return NULL.
  735.  
  736.  NOTES
  737.   The single parameter version of this function is equivalent to
  738.  
  739.      define wherefirst (a)
  740.      {
  741.         variable i = where (a);
  742.         if (length(i))
  743.           return i[0];
  744.         else
  745.           return NULL;
  746.      }
  747.  
  748.  
  749.  SEE ALSO
  750.   where, wherelast
  751.  
  752. --------------------------------------------------------------
  753.  
  754. wherelast
  755.  
  756.  SYNOPSIS
  757.   Get the index of the last non-zero array element
  758.  
  759.  USAGE
  760.   Int_Type wherelast (Array_Type a [,start_index])
  761.  
  762.  DESCRIPTION
  763.   The `wherelast' function returns the index of the last
  764.   non-zero element of a specified array.  If the optional parameter
  765.   `start_index' is given, the backward search will take place starting
  766.   from that index.  If a non-zero element is not found, the function
  767.   will return NULL.
  768.  
  769.  NOTES
  770.   The single parameter version of this function is equivalent to
  771.  
  772.      define wherefirst (a)
  773.      {
  774.         variable i = where (a);
  775.         if (length(i))
  776.           return i[-1];
  777.         else
  778.           return NULL;
  779.      }
  780.  
  781.  
  782.  SEE ALSO
  783.   where, wherefirst
  784.  
  785. --------------------------------------------------------------
  786.  
  787. assoc_delete_key
  788.  
  789.  SYNOPSIS
  790.   Delete a key from an Associative Array
  791.  
  792.  USAGE
  793.   assoc_delete_key (Assoc_Type a, String_Type k)
  794.  
  795.  DESCRIPTION
  796.   The `assoc_delete_key' function deletes a key given by `k'
  797.   from the associative array `a'.  If the specified key does not
  798.   exist in `a', then this function has no effect.
  799.  
  800.  SEE ALSO
  801.   assoc_key_exists, assoc_get_keys
  802.  
  803. --------------------------------------------------------------
  804.  
  805. assoc_get_keys
  806.  
  807.  SYNOPSIS
  808.   Return all the key names of an Associative Array
  809.  
  810.  USAGE
  811.   String_Type[] assoc_get_keys (Assoc_Type a)
  812.  
  813.  DESCRIPTION
  814.   This function returns all the key names of an associative array
  815.   `a' as an ordinary one dimensional array of strings.  If the
  816.   associative array contains no keys, an empty array will be returned.
  817.  
  818.  SEE ALSO
  819.   assoc_get_values, assoc_key_exists, assoc_delete_key, length
  820.  
  821. --------------------------------------------------------------
  822.  
  823. assoc_get_values
  824.  
  825.  SYNOPSIS
  826.   Return all the values of an Associative Array
  827.  
  828.  USAGE
  829.   Array_Type assoc_get_keys (Assoc_Type a)
  830.  
  831.  DESCRIPTION
  832.   This function returns all the values in the associative array
  833.   `a' as an array of proper type.  If the associative array
  834.   contains no keys, an empty array will be returned.
  835.  
  836.  EXAMPLE
  837.   Suppose that `a' is an associative array of type
  838.   Integer_Type, i.e., it was created via
  839.  
  840.       variable a = Assoc_Type[Integer_Type];
  841.  
  842.   The the following may be used to print the values of the array in
  843.   ascending order:
  844.  
  845.       static define int_sort_fun (x, y)
  846.       {
  847.          return sign (x - y);
  848.       }
  849.       define sort_and_print_values (a)
  850.       {
  851.          variable v = assoc_get_values (a);
  852.          variable i = array_sort (v, &int_sort_fun);
  853.          v = v[i];
  854.          foreach (v)
  855.            {
  856.               variable vi = ();
  857.               () = fprintf (stdout, "%d\n", vi);
  858.            }
  859.       }
  860.  
  861.  
  862.  SEE ALSO
  863.   assoc_get_values, assoc_key_exists, assoc_delete_key, array_sort
  864.  
  865. --------------------------------------------------------------
  866.  
  867. assoc_key_exists
  868.  
  869.  SYNOPSIS
  870.   Check to see whether a key exists in an Associative Array
  871.  
  872.  USAGE
  873.   Integer_Type assoc_key_exists (Assoc_Type a, String_Type k)
  874.  
  875.  DESCRIPTION
  876.   The `assoc_key_exists' function may be used to determine whether
  877.   or not a specified key `k' exists in an associative array `a'.
  878.   It returns 1 if the key exists, or 0 if it does not.
  879.  
  880.  SEE ALSO
  881.   assoc_get_keys, assoc_get_values, assoc_delete_key
  882.  
  883. --------------------------------------------------------------
  884.  
  885. array_to_bstring
  886.  
  887.  SYNOPSIS
  888.   Convert an array to a binary string
  889.  
  890.  USAGE
  891.   BString_Type array_to_bstring (Array_Type a)
  892.  
  893.  DESCRIPTION
  894.    The `array_to_bstring' function returns the elements of an
  895.    array `a' as a binary string.
  896.  
  897.  SEE ALSO
  898.   bstring_to_array, init_char_array
  899.  
  900. --------------------------------------------------------------
  901.  
  902. bstring_to_array
  903.  
  904.  SYNOPSIS
  905.   Convert a binary string to an array of characters
  906.  
  907.  USAGE
  908.   UChar_Type[] bstring_to_array (BString_Type b)
  909.  
  910.  DESCRIPTION
  911.    The `bstring_to_array' function returns an array of unsigned
  912.    characters whose elements correspond to the characters in the
  913.    binary string.
  914.  
  915.  SEE ALSO
  916.   array_to_bstring, init_char_array
  917.  
  918. --------------------------------------------------------------
  919.  
  920. bstrlen
  921.  
  922.  SYNOPSIS
  923.   Get the length of a binary string
  924.  
  925.  USAGE
  926.   UInt_Type bstrlen (BString_Type s)
  927.  
  928.  DESCRIPTION
  929.   The `bstrlen' function may be used to obtain the length of a
  930.   binary string.  A binary string differs from an ordinary string (a C
  931.   string) in that a binary string may include null chracters.
  932.  
  933.  EXAMPLE
  934.  
  935.     s = "hello\0";
  936.     len = bstrlen (s);      % ==> len = 6
  937.     len = strlen (s);       % ==> len = 5
  938.  
  939.  
  940.  SEE ALSO
  941.   strlen, length
  942.  
  943. --------------------------------------------------------------
  944.  
  945. count_byte_occurances
  946.  
  947.  SYNOPSIS
  948.   Count the number of occurances of a byte in a binary string
  949.  
  950.  USAGE
  951.   UInt_Type count_char_occurances (bstring, byte)
  952.  
  953.  DESCRIPTION
  954.   This function returns the number of times the specified byte
  955.   occurs in the binary string `bstr'.
  956.  
  957.  NOTES
  958.   This function uses byte-semanics.  If character semantics are
  959.   desired, use the `count_char_occurances' function.
  960.  
  961.  SEE ALSO
  962.   count_char_occurances
  963.  
  964. --------------------------------------------------------------
  965.  
  966. pack
  967.  
  968.  SYNOPSIS
  969.   Pack objects into a binary string
  970.  
  971.  USAGE
  972.   BString_Type pack (String_Type fmt, ...)
  973.  
  974.  DESCRIPTION
  975.   The `pack' function combines zero or more objects (represented
  976.   by the ellipses above) into a binary string according to the format
  977.   string `fmt'.
  978.  
  979.   The format string consists of one or more data-type specification
  980.   characters defined by the following table:
  981.  
  982.      c     char
  983.      C     unsigned char
  984.      h     short
  985.      H     unsigned short
  986.      i     int
  987.      I     unsigned int
  988.      l     long
  989.      L     unsigned long
  990.      m     long long
  991.      M     unsigned long long
  992.      j     16 bit int
  993.      J     16 bit unsigned int
  994.      k     32 bit int
  995.      K     32 bit unsigned int
  996.      q     64 bit int
  997.      Q     64 bit unsigned int
  998.      f     float
  999.      d     double
  1000.      F     32 bit float
  1001.      D     64 bit float
  1002.      s     character string, null padded
  1003.      S     character string, space padded
  1004.      z     character string, null padded
  1005.      x     a null pad character
  1006.  
  1007.   A decimal length specifier may follow the data-type specifier.  With
  1008.   the exception of the `s' and `S' specifiers, the length
  1009.   specifier indicates how many objects of that data type are to be
  1010.   packed or unpacked from the string.  When used with the `s',
  1011.   `S', or `z' specifiers, it indicates the field width to be
  1012.   used.  If the length specifier is not present, the length defaults
  1013.   to one.
  1014.  
  1015.   When packing, unlike the `s' specifier, the `z' specifier
  1016.   guarantees that at least one null byte will be written even if the
  1017.   field has to be truncated to do so.
  1018.  
  1019.   With the exception of `c', `C', `s', `S', and
  1020.   `x', each of these may be prefixed by a character that indicates
  1021.   the byte-order of the object:
  1022.  
  1023.      >    big-endian order (network order)
  1024.      <    little-endian order
  1025.      =    native byte-order
  1026.  
  1027.   The default is to use native byte order.
  1028.  
  1029.   When unpacking via the `unpack' function, if the length
  1030.   specifier is greater than one, then an array of that length will be
  1031.   returned.  In addition, trailing whitespace and null characters are
  1032.   stripped when unpacking an object given by the `S' specifier.
  1033.   Trailing null characters will be stripped from an object represented
  1034.   by the `z' specifier.  No such stripping is performed by the `s'
  1035.   specifier.
  1036.  
  1037.  EXAMPLE
  1038.  
  1039.      a = pack ("cc", 'A', 'B');         % ==> a = "AB";
  1040.      a = pack ("c2", 'A', 'B');         % ==> a = "AB";
  1041.      a = pack ("xxcxxc", 'A', 'B');     % ==> a = "\0\0A\0\0B";
  1042.      a = pack ("h2", 'A', 'B');         % ==> a = "\0A\0B" or "\0B\0A"
  1043.      a = pack (">h2", 'A', 'B');        % ==> a = "\0\xA\0\xB"
  1044.      a = pack ("<h2", 'A', 'B');        % ==> a = "\0B\0A"
  1045.      a = pack ("s4", "AB", "CD");       % ==> a = "AB\0\0"
  1046.      a = pack ("s4s2", "AB", "CD");     % ==> a = "AB\0\0CD"
  1047.      a = pack ("S4", "AB", "CD");       % ==> a = "AB  "
  1048.      a = pack ("S4S2", "AB", "CD");     % ==> a = "AB  CD"
  1049.      a = pack ("z4", "AB");             % ==> a = "AB\0\0"
  1050.      a = pack ("s4", "ABCDEFG");        % ==> a = "ABCD"
  1051.      a = pack ("z4", "ABCDEFG");        % ==> a = "ABC\0"
  1052.  
  1053.  
  1054.  SEE ALSO
  1055.   unpack, sizeof_pack, pad_pack_format, sprintf
  1056.  
  1057. --------------------------------------------------------------
  1058.  
  1059. pad_pack_format
  1060.  
  1061.  SYNOPSIS
  1062.   Add padding to a pack format
  1063.  
  1064.  USAGE
  1065.   BString_Type pad_pack_format (String_Type fmt)
  1066.  
  1067.  DESCRIPTION
  1068.   The `pad_pack_format' function may be used to add the
  1069.   appropriate padding characters to the format `fmt' such that the
  1070.   data types specified by the format will be properly aligned on word
  1071.   boundaries.  This is especially important when reading or writing files
  1072.   that assume the native alignment.
  1073.  
  1074.  SEE ALSO
  1075.   pack, unpack, sizeof_pack
  1076.  
  1077. --------------------------------------------------------------
  1078.  
  1079. sizeof_pack
  1080.  
  1081.  SYNOPSIS
  1082.   Compute the size implied by a pack format string
  1083.  
  1084.  USAGE
  1085.   UInt_Type sizeof_pack (String_Type fmt)
  1086.  
  1087.  DESCRIPTION
  1088.   The `sizeof_pack' function returns the size of the binary string
  1089.   represented by the format string `fmt'.  This information may be
  1090.   needed when reading a structure from a file.
  1091.  
  1092.  SEE ALSO
  1093.   pack, unpack, pad_pack_format
  1094.  
  1095. --------------------------------------------------------------
  1096.  
  1097. unpack
  1098.  
  1099.  SYNOPSIS
  1100.   Unpack Objects from a Binary String
  1101.  
  1102.  USAGE
  1103.   (...) = unpack (String_Type fmt, BString_Type s)
  1104.  
  1105.  DESCRIPTION
  1106.   The `unpack' function unpacks objects from a binary string
  1107.   `s' according to the format `fmt' and returns the objects to
  1108.   the stack in the order in which they were unpacked.  See the
  1109.   documentation of the `pack' function for details about the
  1110.   format string.
  1111.  
  1112.  EXAMPLE
  1113.  
  1114.     (x,y) = unpack ("cc", "AB");          % ==> x = 'A', y = 'B'
  1115.     x = unpack ("c2", "AB");              % ==> x = ['A', 'B']
  1116.     x = unpack ("x<H", "\0\xAB\xCD");     % ==> x = 0xCDABuh
  1117.     x = unpack ("xxs4", "a b c\0d e f");  % ==> x = "b c\0"
  1118.     x = unpack ("xxS4", "a b c\0d e f");  % ==> x = "b c"
  1119.  
  1120.  
  1121.  SEE ALSO
  1122.   pack, sizeof_pack, pad_pack_format
  1123.  
  1124. --------------------------------------------------------------
  1125.  
  1126. Assoc_Type
  1127.  
  1128.  SYNOPSIS
  1129.   An associative array or hash type
  1130.  
  1131.  DESCRIPTION
  1132.   An Assoc_Type object is like an array except that it is
  1133.   indexed using strings and not integers.  Unlike an Array_Type
  1134.   object, the size of an associative array is not fixed, but grows as
  1135.   objects are added to the array.  Another difference is that ordinary
  1136.   arrays represent ordered object; however, the ordering of the
  1137.   elements of an `Assoc_Type' object is unspecified.
  1138.  
  1139.   An Assoc_Type object whose elements are of some data-type
  1140.   `d' may be created using using
  1141.  
  1142.     A = Assoc_Type[d];
  1143.  
  1144.   For example,
  1145.  
  1146.     A = Assoc_Type[Int_Type];
  1147.  
  1148.   will create an associative array of integers.  To create an
  1149.   associative array capable of storing an arbitrary type, use the form
  1150.  
  1151.     A = Assoc_Type[];
  1152.  
  1153.  
  1154.   An optional parameter may be used to specify a default value for
  1155.   array elements.  For example,
  1156.  
  1157.    A = Assoc_Type[Int_Type, -1];
  1158.  
  1159.   creates an integer-valued associative array with a default element
  1160.   value of -1.  Then `A["foo"]' will return -1 if the key
  1161.   `"foo"' does not exist in the array.  Default values are
  1162.   available only if the type was specified when the associative array
  1163.   was created.
  1164.  
  1165.   The following functions may be used with associative arrays:
  1166.  
  1167.     assoc_get_keys
  1168.     assoc_get_values
  1169.     assoc_key_exists
  1170.     assoc_delete_key
  1171.  
  1172.   The `length' function may be used to obtain the number of
  1173.   elements in the array.
  1174.  
  1175.   The `foreach' construct may be used with associative arrays via
  1176.   one of the following forms:
  1177.  
  1178.       foreach k,v (A) {...}
  1179.       foreach k (A) using ("keys") { ... }
  1180.       foreach v (A) using ("values") { ... }
  1181.       foreach k,v (A) using ("keys", "values") { ... }
  1182.  
  1183.   In all the above forms, the loop is over all elements of the array
  1184.   such that `v=A[k]'.
  1185.  
  1186.  SEE ALSO
  1187.   List_Type, Array_Type, Struct_Type
  1188.  
  1189. --------------------------------------------------------------
  1190.  
  1191. List_Type
  1192.  
  1193.  SYNOPSIS
  1194.   A list object
  1195.  
  1196.  DESCRIPTION
  1197.   An object of type `List_Type' represents a list, which is
  1198.   defined as an ordered heterogeneous collection of objects.
  1199.   A list may be created using, e.g.,
  1200.  
  1201.     empty_list = {};
  1202.     list_with_4_items = {[1:10], "three", 9, {1,2,3}};
  1203.  
  1204.   Note that the last item of the list in the last example is also a
  1205.   list.  A List_Type object may be manipulated by the following
  1206.   functions:
  1207.  
  1208.     list_new
  1209.     list_insert
  1210.     list_append
  1211.     list_delete
  1212.     list_reverse
  1213.     list_pop
  1214.  
  1215.   A `List_Type' object may be indexed using an array syntax with
  1216.   the first item on the list given by an index of 0.  The
  1217.   `length' function may be used to obtain the number of elements
  1218.   in the list.
  1219.  
  1220.   A copy of the list may be created using the @ operator, e.g.,
  1221.   `copy = @list'.
  1222.  
  1223.   The `foreach' statement may be used with a List_Type
  1224.   object to loop over its elements:
  1225.  
  1226.     foreach elem (list) {....}
  1227.  
  1228.  
  1229.  SEE ALSO
  1230.   Array_Type, Assoc_Type, Struct_Type
  1231.  
  1232. --------------------------------------------------------------
  1233.  
  1234. String_Type
  1235.  
  1236.  SYNOPSIS
  1237.   A string object
  1238.  
  1239.  DESCRIPTION
  1240.   An object of type `String_Type' represents a string of bytes or
  1241.   characters, which in general have different semantics depending upon
  1242.   the UTF-8 mode.
  1243.  
  1244.   The string obeys byte-semantics when indexed as an
  1245.   array.  That is, `S[0]' will return the first byte of the
  1246.   string `S'.  For character semantics, the nth character in the
  1247.   string may be obtained using `substr' function.
  1248.  
  1249.   The `foreach' statement may be used with a String_Type
  1250.   object `S' to loop over its bytes:
  1251.  
  1252.     foreach b (S) {....}
  1253.     foreach b (S) using ("bytes") {....}
  1254.  
  1255.   To loop over its characters, the following form may be used:
  1256.  
  1257.     foreach c (S) using ("chars") {...}
  1258.  
  1259.   When UTF-8 mode is not in effect, the byte and character forms will
  1260.   produce the same sequence.  Otherwise, the string will be decoded
  1261.   to generate the (wide) character sequence.  If the string contains
  1262.   an invalid UTF-8 encoded character, sucessive bytes of the invalid
  1263.   sequence will be returned as negative integers.  For example,
  1264.   `"a\xAB\x{AB}"' specifies a string composed of the character
  1265.   `a', a byte `0xAB', and the character `0xAB'.  In
  1266.   this case,
  1267.  
  1268.      foreach c ("a\xAB\x{AB}") {...}
  1269.  
  1270.   will produce the integer-valued sequence `'a', -0xAB, 0xAB'.
  1271.  
  1272.  SEE ALSO
  1273.   Array_Type, _slang_utf8_ok
  1274.  
  1275. --------------------------------------------------------------
  1276.  
  1277. Struct_Type
  1278.  
  1279.  SYNOPSIS
  1280.   A structure datatype
  1281.  
  1282.  DESCRIPTION
  1283.   A Struct_Type object with fields `f1', `f2',...,
  1284.   `fN' may be created using
  1285.  
  1286.     s = struct { f1, f2, ..., fN };
  1287.  
  1288.   The fields may be accessed via the "dot" operator, e.g.,
  1289.  
  1290.      s.f1 = 3;
  1291.      if (s12.f1 == 4) s.f1++;
  1292.  
  1293.   By default, all fields will be initialized to NULL.
  1294.  
  1295.   A structure may also be created using the dereference operator (@):
  1296.  
  1297.     s = @Struct_Type ("f1", "f2", ..., "fN");
  1298.     s = @Struct_Type ( ["f1", "f2", ..., "fN"] );
  1299.  
  1300.   Functions for manipulating structure fields include:
  1301.  
  1302.      _push_struct_field_values
  1303.      get_struct_field
  1304.      get_struct_field_names
  1305.      set_struct_field
  1306.      set_struct_fields
  1307.  
  1308.  
  1309.   The `foreach' loop may be used to loop over elements of a linked
  1310.   list.  Suppose that first structure in the list is called
  1311.   `root', and that the `child' field is used to form the
  1312.   chain.  Then one may walk the list using:
  1313.  
  1314.      foreach s (root) using ("child")
  1315.       {
  1316.          % s will take on successive values in the list
  1317.           .
  1318.           .
  1319.       }
  1320.  
  1321.   The loop will terminate when the last elements `child' field is
  1322.   NULL.  If no ``linking'' field is specified, the field name will
  1323.   default to `next'.
  1324.  
  1325.   User-defined data types are similar to the `Struct_Type'.  A
  1326.   type, e.g., `Vector_Type' may be created using:
  1327.  
  1328.     typedef struct { x, y, z } Vector_Type;
  1329.  
  1330.   Objects of this type may be created via the @ operator, e.g.,
  1331.  
  1332.     v = @Vector_Type;
  1333.  
  1334.   It is recommended that this be used in a function for creating such
  1335.   types, e.g.,
  1336.  
  1337.     define vector (x, y, z)
  1338.     {
  1339.        variable v = @Vector_Type;
  1340.        v.x = x;
  1341.        v.y = y;
  1342.        v.z = z;
  1343.        return v;
  1344.     }
  1345.  
  1346.   The action of the binary and unary operators may be defined for such
  1347.   types.  Consider the "+" operator.  First define a function for
  1348.   adding two `Vector_Type' objects:
  1349.  
  1350.     static define vector_add (v1, v2)
  1351.     {
  1352.        return vector (v1.x+v2.x, v1.y+v2.y, v1.z, v2.z);
  1353.     }
  1354.  
  1355.   Then use
  1356.  
  1357.     __add_binary ("+", Vector_Type, &vector_add, Vector_Type, Vector_Type);
  1358.  
  1359.   to indicate that the function is to be called whenever the "+"
  1360.   binary operation between two `Vector_Type' objects takes place,
  1361.   e.g.,
  1362.  
  1363.     V1 = vector (1, 2, 3);
  1364.     V2 = vector (8, 9, 1);
  1365.     V3 = V1 + V2;
  1366.  
  1367.   will assigned the vector (9, 11, 4) to `V3'.  Similarly, the
  1368.   `"*"' operator between scalars and vectors may be defined using:
  1369.  
  1370.     static define vector_scalar_mul (v, a)
  1371.     {
  1372.        return vector (a*v.x, a*v.y, a*v.z);
  1373.     }
  1374.     static define scalar_vector_mul (a, v)
  1375.     {
  1376.        return vector_scalar_mul (v, a);
  1377.     }
  1378.     __add_binary ("*", Vector_Type, &scalar_vector_mul, Any_Type, Vector_Type);
  1379.     __add_binary ("*", Vector_Type, &vector_scalar_mul, Vector_Type, Any_Type);
  1380.  
  1381.   Related functions include:
  1382.  
  1383.     __add_unary
  1384.     __add_string
  1385.     __add_destroy
  1386.  
  1387.  
  1388.  SEE ALSO
  1389.   List_Type, Assoc_Type
  1390.  
  1391. --------------------------------------------------------------
  1392.  
  1393. File_Type
  1394.  
  1395.  SYNOPSIS
  1396.   A type representing a C stdio object
  1397.  
  1398.  DESCRIPTION
  1399.   An File_Type is the interpreter's representation of a C
  1400.   stdio FILE object and is usually created using the `fopen'
  1401.   function, i.e.,
  1402.  
  1403.     fp = fopen ("file.dat", "r");
  1404.  
  1405.   Functions that utilize the File_Type include:
  1406.  
  1407.     fopen
  1408.     fclose
  1409.     fgets
  1410.     fputs
  1411.     ferror
  1412.     feof
  1413.     fflush
  1414.     fprintf
  1415.     fseek
  1416.     ftell
  1417.     fread
  1418.     fwrite
  1419.     fread_bytes
  1420.  
  1421.   The `foreach' construct may be used with File_Type
  1422.   objects via one of the following forms:
  1423.  
  1424.    foreach line (fp) {...}
  1425.    foreach byte (A) using ("char") { ... }   % read bytes
  1426.    foreach line (A) using ("line") { ... }   % read lines (default)
  1427.    foreach line (A) using ("wsline") { ... } % whitespace stripped from lines
  1428.  
  1429.  
  1430.  SEE ALSO
  1431.   List_Type, Array_Type, Struct_Type
  1432.  
  1433. --------------------------------------------------------------
  1434.  
  1435. _bofeof_info
  1436.  
  1437.  SYNOPSIS
  1438.   Control the generation of function callback code
  1439.  
  1440.  USAGE
  1441.   Int_Type _bofeof_info
  1442.  
  1443.  DESCRIPTION
  1444.  This value of this variable dictates whether or not the S-Lang
  1445.  interpeter will generate code to call the beginning and end of
  1446.  function callback handlers.  The value of this variable is local to
  1447.  the compilation unit, but is inherited by other units loaded by the
  1448.  current unit.
  1449.  
  1450.  If the value of this variable is 1 when a function is defined, then
  1451.  when the function is executed, the callback handlers defined via
  1452.  `_set_bof_handler' and `_set_eof_handler' will be called.
  1453.  
  1454.  SEE ALSO
  1455.   _set_bof_handler, _set_eof_handler, _boseos_info
  1456.  
  1457. --------------------------------------------------------------
  1458.  
  1459. _boseos_info
  1460.  
  1461.  SYNOPSIS
  1462.   Control the generation of BOS/EOS callback code
  1463.  
  1464.  USAGE
  1465.   Int_Type _boseos_info
  1466.  
  1467.  DESCRIPTION
  1468.  This value of this variable dictates whether or not the S-Lang
  1469.  interpeter will generate code to call the beginning and end of
  1470.  statement callback handlers.  The value of this variable is local to
  1471.  the compilation unit, but is inherited by other units loaded by the
  1472.  current unit.
  1473.  
  1474.  The value of `_boseos_info' controls the generation of code for
  1475.  callbacks as follows:
  1476.  
  1477.    Value      Description
  1478.    -----------------------------------------------------------------
  1479.      0        No code for making callbacks will be produced.
  1480.      1        Callback generation will take place for all non-branching
  1481.               and looping statements.
  1482.      2        Same as for 1 with the addition that code will also be
  1483.               generated for branching statements (if, !if, loop, ...)
  1484.      3        Same as 2, but also including break and continue
  1485.               statements.
  1486.  
  1487.  A non-branching statement is one that does not effect chain of
  1488.  execution.  Branching statements include all looping statements,
  1489.  conditional statement, `break', `continue', and `return'.
  1490.  
  1491.  EXAMPLE
  1492.  Consider the following:
  1493.  
  1494.    _boseos_info = 1;
  1495.    define foo ()
  1496.    {
  1497.       if (some_expression)
  1498.         some_statement;
  1499.    }
  1500.    _boseos_info = 2;
  1501.    define bar ()
  1502.    {
  1503.       if (some_expression)
  1504.         some_statement;
  1505.    }
  1506.  
  1507.  The function `foo' will be compiled with code generated to call the
  1508.  BOS and EOS handlers when `some_statement' is executed.  The
  1509.  function `bar' will be compiled with code to call the handlers
  1510.  for both `some_expression' and `some_statement'.
  1511.  
  1512.  NOTES
  1513.  The `sldb' debugger and `slsh''s `stkcheck.sl' make use of this
  1514.  facility.
  1515.  
  1516.  SEE ALSO
  1517.   _set_bos_handler, _set_eos_handler, _bofeof_info
  1518.  
  1519. --------------------------------------------------------------
  1520.  
  1521. _clear_error
  1522.  
  1523.  SYNOPSIS
  1524.   Clear an error condition (deprecated)
  1525.  
  1526.  USAGE
  1527.   _clear_error ()
  1528.  
  1529.  DESCRIPTION
  1530.   This function has been deprecated.  New code should make use of
  1531.   try-catch exception handling.
  1532.  
  1533.   This function may be used in error-blocks to clear the error that
  1534.   triggered execution of the error block.  Execution resumes following
  1535.   the statement, in the scope of the error-block, that triggered the
  1536.   error.
  1537.  
  1538.  EXAMPLE
  1539.   Consider the following wrapper around the `putenv' function:
  1540.  
  1541.     define try_putenv (name, value)
  1542.     {
  1543.        variable status;
  1544.        ERROR_BLOCK
  1545.         {
  1546.           _clear_error ();
  1547.           status = -1;
  1548.         }
  1549.        status = 0;
  1550.        putenv (sprintf ("%s=%s", name, value);
  1551.        return status;
  1552.     }
  1553.  
  1554.   If `putenv' fails, it generates an error condition, which the
  1555.   `try_putenv' function catches and clears.  Thus `try_putenv'
  1556.   is a function that returns -1 upon failure and 0 upon
  1557.   success.
  1558.  
  1559.  SEE ALSO
  1560.   _trace_function, _slangtrace, _traceback
  1561.  
  1562. --------------------------------------------------------------
  1563.  
  1564. _set_bof_handler
  1565.  
  1566.  SYNOPSIS
  1567.   Set the beginning of function callback handler
  1568.  
  1569.  USAGE
  1570.   _set_bof_handler (Ref_Type func)
  1571.  
  1572.  DESCRIPTION
  1573.  This function is used to set the function to be called prior to the
  1574.  execution of the body S-Lang function but after its arguments have
  1575.  been evaluated, provided that function was defined
  1576.  with `_bofeof_info' set appropriately.  The callback function
  1577.  must be defined to take a single parameter representing the name of
  1578.  the function and must return nothing.
  1579.  
  1580.  EXAMPLE
  1581.  
  1582.     private define bof_handler (fun)
  1583.     {
  1584.       () = fputs ("About to execute $fun"$, stdout);
  1585.     }
  1586.     _set_bos_handler (&bof_handler);
  1587.  
  1588.  
  1589.  NOTES
  1590.  
  1591.  SEE ALSO
  1592.   _set_eof_handler, _boseos_info, _set_bos_handler
  1593.  
  1594. --------------------------------------------------------------
  1595.  
  1596. _set_bos_handler
  1597.  
  1598.  SYNOPSIS
  1599.   Set the beginning of statement callback handler
  1600.  
  1601.  USAGE
  1602.   _set_bos_handler (Ref_Type func)
  1603.  
  1604.  DESCRIPTION
  1605.  This function is used to set the function to be called prior to the
  1606.  beginning of a statement.  The function will be passed two
  1607.  parameters: the name of the file and the line number of the statement
  1608.  to be executed.  It should return nothing.
  1609.  
  1610.  EXAMPLE
  1611.  
  1612.     private define bos_handler (file, line)
  1613.     {
  1614.       () = fputs ("About to execute $file:$line\n"$, stdout);
  1615.     }
  1616.     _set_bos_handler (&bos_handler);
  1617.  
  1618.  
  1619.  NOTES
  1620.  The beginning and end of statement handlers will be called for
  1621.  statements in a file only if that file was compiled with the variable
  1622.  `_boseos_info' set to a non-zero value.
  1623.  
  1624.  SEE ALSO
  1625.   _set_eos_handler, _boseos_info, _bofeof_info
  1626.  
  1627. --------------------------------------------------------------
  1628.  
  1629. _set_eof_handler
  1630.  
  1631.  SYNOPSIS
  1632.   Set the beginning of function callback handler
  1633.  
  1634.  USAGE
  1635.   _set_eof_handler (Ref_Type func)
  1636.  
  1637.  DESCRIPTION
  1638.  This function is used to set the function to be called at the end of
  1639.  execution of a S-Lang function, provided that function was compiled with
  1640.  `_bofeof_info' set accordingly.
  1641.  
  1642.  The callback function will be passed no parameters and it must return
  1643.  nothing.
  1644.  
  1645.  EXAMPLE
  1646.  
  1647.    private define eof_handler ()
  1648.    {
  1649.      () = fputs ("Done executing the function\n", stdout);
  1650.    }
  1651.    _set_eof_handler (&eof_handler);
  1652.  
  1653.  
  1654.  SEE ALSO
  1655.   _set_bof_handler, _bofeof_info, _boseos_info
  1656.  
  1657. --------------------------------------------------------------
  1658.  
  1659. _set_eos_handler
  1660.  
  1661.  SYNOPSIS
  1662.   Set the end of statement callback handler
  1663.  
  1664.  USAGE
  1665.   _set_eos_handler (Ref_Type func)
  1666.  
  1667.  DESCRIPTION
  1668.  This function is used to set the function to be called at the end of
  1669.  a statement.  The function will be passed no parameters and it should
  1670.  return nothing.
  1671.  
  1672.  EXAMPLE
  1673.  
  1674.    private define eos_handler ()
  1675.    {
  1676.      () = fputs ("Done executing the statement\n", stdout);
  1677.    }
  1678.    _set_eos_handler (&eos_handler);
  1679.  
  1680.  
  1681.  NOTES
  1682.  The beginning and end of statement handlers will be called for
  1683.  statements in a file only if that file was compiled with the variable
  1684.  `_boseos_info' set to a non-zero value.
  1685.  
  1686.  SEE ALSO
  1687.   _set_bos_handler, _boseos_info, _bofeof_info
  1688.  
  1689. --------------------------------------------------------------
  1690.  
  1691. _slangtrace
  1692.  
  1693.  SYNOPSIS
  1694.   Turn function tracing on or off
  1695.  
  1696.  USAGE
  1697.   Integer_Type _slangtrace
  1698.  
  1699.  DESCRIPTION
  1700.   The `_slangtrace' variable is a debugging aid that when set to a
  1701.   non-zero value enables tracing when function declared by
  1702.   `_trace_function' is entered.  If the value is greater than
  1703.   zero, both intrinsic and user defined functions will get traced.
  1704.   However, if set to a value less than zero, intrinsic functions will
  1705.   not get traced.
  1706.  
  1707.  SEE ALSO
  1708.   _trace_function, _traceback, _print_stack
  1709.  
  1710. --------------------------------------------------------------
  1711.  
  1712. _traceback
  1713.  
  1714.  SYNOPSIS
  1715.   Generate a traceback upon error
  1716.  
  1717.  USAGE
  1718.   Integer_Type _traceback
  1719.  
  1720.  DESCRIPTION
  1721.   `_traceback' is an intrinsic integer variable whose bitmapped value
  1722.   controls the generation of the call-stack traceback upon error.
  1723.   When set to 0, no traceback will be generated.  Otherwise its value
  1724.   is the bitwise-or of the following integers:
  1725.  
  1726.        1        Create a full traceback
  1727.        2        Omit local variable information
  1728.        4        Generate just one line of traceback
  1729.  
  1730.   The default value of this variable is 4.
  1731.  
  1732.  NOTES
  1733.   Running `slsh' with the `-g' option causes this variable to be
  1734.   set to 1.
  1735.  
  1736.  SEE ALSO
  1737.   _boseos_info
  1738.  
  1739. --------------------------------------------------------------
  1740.  
  1741. _trace_function
  1742.  
  1743.  SYNOPSIS
  1744.   Set the function to trace
  1745.  
  1746.  USAGE
  1747.   _trace_function (String_Type f)
  1748.  
  1749.  DESCRIPTION
  1750.   `_trace_function' declares that the S-Lang function with name
  1751.   `f' is to be traced when it is called.  Calling
  1752.   `_trace_function' does not in itself turn tracing on.  Tracing
  1753.   is turned on only when the variable `_slangtrace' is non-zero.
  1754.  
  1755.  SEE ALSO
  1756.   _slangtrace, _traceback
  1757.  
  1758. --------------------------------------------------------------
  1759.  
  1760. access
  1761.  
  1762.  SYNOPSIS
  1763.   Check to see if a file is accessable
  1764.  
  1765.  USAGE
  1766.   Int_Type access (String_Type pathname, Int_Type mode)
  1767.  
  1768.  DESCRIPTION
  1769.  This functions checks to see if the current process has access to the
  1770.  specified pathname.  The `mode' parameter determines the type of
  1771.  desired access.  Its value is given by the bitwise-or of one or more
  1772.  of the following constants:
  1773.  
  1774.     R_OK   Check for read permission
  1775.     W_OK   Check for write permission
  1776.     X_OK   Check for execute permission
  1777.     F_OK   Check for existence
  1778.  
  1779.  
  1780.  The function will return 0 if process has the requested access
  1781.  permissions to the file, otherwise it will return -1 and set
  1782.  `errno' accordingly.
  1783.  
  1784.  Access to a file depend not only upon the file itself, but also upon
  1785.  the permissions of each of the directories in the pathname.  The
  1786.  checks are done using the real user and group ids of the process, and
  1787.  not using the effective ids.
  1788.  
  1789.  SEE ALSO
  1790.   stat_file
  1791.  
  1792. --------------------------------------------------------------
  1793.  
  1794. chdir
  1795.  
  1796.  SYNOPSIS
  1797.   Change the current working directory
  1798.  
  1799.  USAGE
  1800.   Int_Type chdir (String_Type dir)
  1801.  
  1802.  DESCRIPTION
  1803.   The `chdir' function may be used to change the current working
  1804.   directory to the directory specified by `dir'.  Upon success it
  1805.   returns zero.  Upon failure it returns `-1' and sets
  1806.   `errno' accordingly.
  1807.  
  1808.  SEE ALSO
  1809.   mkdir, stat_file
  1810.  
  1811. --------------------------------------------------------------
  1812.  
  1813. chmod
  1814.  
  1815.  SYNOPSIS
  1816.   Change the mode of a file
  1817.  
  1818.  USAGE
  1819.   Int_Type chmod (String_Type file, Int_Type mode)
  1820.  
  1821.  DESCRIPTION
  1822.   The `chmod' function changes the permissions of the specified
  1823.   file to those given by `mode'.  It returns `0' upon
  1824.   success, or `-1' upon failure setting `errno' accordingly.
  1825.  
  1826.   See the system specific documentation for the C library
  1827.   function `chmod' for a discussion of the `mode' parameter.
  1828.  
  1829.  SEE ALSO
  1830.   chown, stat_file
  1831.  
  1832. --------------------------------------------------------------
  1833.  
  1834. chown
  1835.  
  1836.  SYNOPSIS
  1837.   Change the owner of a file
  1838.  
  1839.  USAGE
  1840.   Int_Type chown (String_Type file, Int_Type uid, Int_Type gid)
  1841.  
  1842.  DESCRIPTION
  1843.   The `chown' function is used to change the user-id and group-id of
  1844.   `file' to `uid' and `gid', respectively.  It returns
  1845.   0 upon success and -1 upon failure, with `errno'
  1846.   set accordingly.
  1847.  
  1848.  NOTES
  1849.   On most systems, only the superuser can change the ownership of a
  1850.   file.
  1851.  
  1852.   Some systems do not support this function.
  1853.  
  1854.  SEE ALSO
  1855.   chmod, stat_file
  1856.  
  1857. --------------------------------------------------------------
  1858.  
  1859. getcwd
  1860.  
  1861.  SYNOPSIS
  1862.   Get the current working directory
  1863.  
  1864.  USAGE
  1865.   String_Type getcwd ()
  1866.  
  1867.  DESCRIPTION
  1868.   The `getcwd' function returns the absolute pathname of the
  1869.   current working directory.  If an error occurs or it cannot
  1870.   determine the working directory, it returns NULL and sets
  1871.   `errno' accordingly.
  1872.  
  1873.  NOTES
  1874.   Under Unix, OS/2, and MSDOS, the pathname returned by this function
  1875.   includes the trailing slash character.  It may also include
  1876.   the drive specifier for systems where that is meaningful.
  1877.  
  1878.  SEE ALSO
  1879.   mkdir, chdir, errno
  1880.  
  1881. --------------------------------------------------------------
  1882.  
  1883. hardlink
  1884.  
  1885.  SYNOPSIS
  1886.   Create a hard-link
  1887.  
  1888.  USAGE
  1889.   Int_Type hardlink (String_Type oldpath, String_Type newpath)
  1890.  
  1891.  DESCRIPTION
  1892.   The `hardlink' function creates a hard-link called
  1893.   `newpath' to the existing file `oldpath'.  If the link was
  1894.   sucessfully created, the function will return 0.  Upon error, the
  1895.   function returns -1 and sets `errno' accordingly.
  1896.  
  1897.  NOTES
  1898.   Not all systems support the concept of a hard-link.
  1899.  
  1900.  SEE ALSO
  1901.   symlink
  1902.  
  1903. --------------------------------------------------------------
  1904.  
  1905. listdir
  1906.  
  1907.  SYNOPSIS
  1908.   Get a list of the files in a directory
  1909.  
  1910.  USAGE
  1911.   String_Type[] listdir (String_Type dir)
  1912.  
  1913.  DESCRIPTION
  1914.   The `listdir' function returns the directory listing of all the
  1915.   files in the specified directory `dir' as an array of strings.
  1916.   It does not return the special files `".."' and `"."' as
  1917.   part of the list.
  1918.  
  1919.  SEE ALSO
  1920.   stat_file, stat_is, length
  1921.  
  1922. --------------------------------------------------------------
  1923.  
  1924. lstat_file
  1925.  
  1926.  SYNOPSIS
  1927.   Get information about a symbolic link
  1928.  
  1929.  USAGE
  1930.   Struct_Type lstat_file (String_Type file)
  1931.  
  1932.  DESCRIPTION
  1933.   The `lstat_file' function behaves identically to `stat_file'
  1934.   but if `file' is a symbolic link, `lstat_file' returns
  1935.   information about the link itself, and not the file that it
  1936.   references.
  1937.  
  1938.   See the documentation for `stat_file' for more information.
  1939.  
  1940.  NOTES
  1941.   On systems that do not support symbolic links, there is no
  1942.   difference between this function and the `stat_file' function.
  1943.  
  1944.  SEE ALSO
  1945.   stat_file, readlink
  1946.  
  1947. --------------------------------------------------------------
  1948.  
  1949. mkdir
  1950.  
  1951.  SYNOPSIS
  1952.   Create a new directory
  1953.  
  1954.  USAGE
  1955.   Int_Type mkdir (String_Type dir [,Int_Type mode])
  1956.  
  1957.  DESCRIPTION
  1958.   The `mkdir' function creates a directory whose name is specified
  1959.   by the `dir' parameter with permissions given by the optional
  1960.   `mode' parameter.  Upon success `mkdir' returns 0, or it
  1961.   returns `-1' upon failure setting `errno' accordingly.  In
  1962.   particular, if the directory already exists, the function will fail
  1963.   and set errno to EEXIST.
  1964.  
  1965.  EXAMPLE
  1966.  
  1967.      define my_mkdir (dir)
  1968.      {
  1969.         if (0 == mkdir (dir)) return;
  1970.         if (errno == EEXIST) return;
  1971.         throw IOError,
  1972.            sprintf ("mkdir %s failed: %s", dir, errno_string (errno));
  1973.      }
  1974.  
  1975.  
  1976.  NOTES
  1977.   The `mode' parameter may not be meaningful on all systems.  On
  1978.   systems where it is meaningful, the actual permissions on the newly
  1979.   created directory are modified by the process's umask.
  1980.  
  1981.  SEE ALSO
  1982.   rmdir, getcwd, chdir, fopen, errno
  1983.  
  1984. --------------------------------------------------------------
  1985.  
  1986. readlink
  1987.  
  1988.  SYNOPSIS
  1989.   String_Type readlink (String_Type path)
  1990.  
  1991.  USAGE
  1992.   Get the value of a symbolic link
  1993.  
  1994.  DESCRIPTION
  1995.   The `readlink' function returns the value of a symbolic link.
  1996.   Upon failure, NULL is returned and `errno' set accordingly.
  1997.  
  1998.  NOTES
  1999.   Not all systems support this function.
  2000.  
  2001.  SEE ALSO
  2002.   symlink, lstat_file, stat_file, stat_is
  2003.  
  2004. --------------------------------------------------------------
  2005.  
  2006. remove
  2007.  
  2008.  SYNOPSIS
  2009.   Delete a file
  2010.  
  2011.  USAGE
  2012.   Int_Type remove (String_Type file)
  2013.  
  2014.  DESCRIPTION
  2015.   The `remove' function deletes a file.  It returns 0 upon
  2016.   success, or -1 upon error and sets `errno' accordingly.
  2017.  
  2018.  SEE ALSO
  2019.   rename, rmdir
  2020.  
  2021. --------------------------------------------------------------
  2022.  
  2023. rename
  2024.  
  2025.  SYNOPSIS
  2026.   Rename a file
  2027.  
  2028.  USAGE
  2029.   Int_Type rename (String_Type old, String_Type new)
  2030.  
  2031.  DESCRIPTION
  2032.   The `rename' function renames a file from `old' to `new'
  2033.   moving it between directories if necessary.  This function may fail
  2034.   if the directories are not on the same file system.  It returns
  2035.   0 upon success, or -1 upon error and sets `errno' accordingly.
  2036.  
  2037.  SEE ALSO
  2038.   remove, errno
  2039.  
  2040. --------------------------------------------------------------
  2041.  
  2042. rmdir
  2043.  
  2044.  SYNOPSIS
  2045.   Remove a directory
  2046.  
  2047.  USAGE
  2048.   Int_Type rmdir (String_Type dir)
  2049.  
  2050.  DESCRIPTION
  2051.   The `rmdir' function deletes the specified directory.  It returns
  2052.   0 upon success or -1 upon error and sets `errno' accordingly.
  2053.  
  2054.  NOTES
  2055.   The directory must be empty before it can be removed.
  2056.  
  2057.  SEE ALSO
  2058.   rename, remove, mkdir
  2059.  
  2060. --------------------------------------------------------------
  2061.  
  2062. stat_file
  2063.  
  2064.  SYNOPSIS
  2065.   Get information about a file
  2066.  
  2067.  USAGE
  2068.   Struct_Type stat_file (String_Type file)
  2069.  
  2070.  DESCRIPTION
  2071.   The `stat_file' function returns information about `file'
  2072.   through the use of the system `stat' call.  If the stat call
  2073.   fails, the function returns NULL and sets errno accordingly.
  2074.   If it is successful, it returns a stat structure with the following
  2075.   integer-value fields:
  2076.  
  2077.     st_dev
  2078.     st_ino
  2079.     st_mode
  2080.     st_nlink
  2081.     st_uid
  2082.     st_gid
  2083.     st_rdev
  2084.     st_size
  2085.     st_atime
  2086.     st_mtime
  2087.     st_ctime
  2088.  
  2089.   See the C library documentation of `stat' for a discussion of the
  2090.   meanings of these fields.
  2091.  
  2092.  EXAMPLE
  2093.   The following example shows how the `stat_file' function may be
  2094.   used to get the size of a file:
  2095.  
  2096.      define file_size (file)
  2097.      {
  2098.         variable st;
  2099.         st = stat_file(file);
  2100.         if (st == NULL)
  2101.           throw IOError, "Unable to stat $file"$;
  2102.         return st.st_size;
  2103.      }
  2104.  
  2105.  
  2106.  SEE ALSO
  2107.   lstat_file, stat_is
  2108.  
  2109. --------------------------------------------------------------
  2110.  
  2111. stat_is
  2112.  
  2113.  SYNOPSIS
  2114.   Parse the st_mode field of a stat structure
  2115.  
  2116.  USAGE
  2117.   Char_Type stat_is (String_Type type, Int_Type st_mode)
  2118.  
  2119.  DESCRIPTION
  2120.   The `stat_is' function returns a boolean value according to
  2121.   whether or not the `st_mode' parameter is of the specified type.
  2122.   Specifically, `type' must be one of the strings:
  2123.  
  2124.      "sock"     (socket)
  2125.      "fifo"     (fifo)
  2126.      "blk"      (block device)
  2127.      "chr"      (character device)
  2128.      "reg"      (regular file)
  2129.      "lnk"      (link)
  2130.      "dir"      (dir)
  2131.  
  2132.   It returns a non-zero value if `st_mode' corresponds to
  2133.   `type'.
  2134.  
  2135.  EXAMPLE
  2136.   The following example illustrates how to use the `stat_is'
  2137.   function to determine whether or not a file is a directory:
  2138.  
  2139.      define is_directory (file)
  2140.      {
  2141.         variable st;
  2142.  
  2143.         st = stat_file (file);
  2144.         if (st == NULL) return 0;
  2145.         return stat_is ("dir", st.st_mode);
  2146.      }
  2147.  
  2148.  
  2149.  SEE ALSO
  2150.   stat_file, lstat_file
  2151.  
  2152. --------------------------------------------------------------
  2153.  
  2154. symlink
  2155.  
  2156.  SYNOPSIS
  2157.   Create a symbolic link
  2158.  
  2159.  USAGE
  2160.   status = symlink (String_Type oldpath, String_Type new_path)
  2161.  
  2162.  DESCRIPTION
  2163.   The `symlink' function may be used to create a symbolic link
  2164.   named `new_path' for  `oldpath'.  If successful, the function
  2165.   returns 0, otherwise it returns -1 and sets `errno' appropriately.
  2166.  
  2167.  NOTES
  2168.   This function is not supported on all systems and even if supported,
  2169.   not all file systems support the concept of a symbolic link.
  2170.  
  2171.  SEE ALSO
  2172.   readlink, hardlink
  2173.  
  2174. --------------------------------------------------------------
  2175.  
  2176. _$
  2177.  
  2178.  SYNOPSIS
  2179.   Expand the dollar-escaped variables in a string
  2180.  
  2181.  USAGE
  2182.   String_Type _$(String_Type s)
  2183.  
  2184.  DESCRIPTION
  2185.  This function expands the dollar-escaped variables in a string and
  2186.  returns the resulting string.
  2187.  
  2188.  EXAMPLE
  2189.  Consider the following code fragment:
  2190.  
  2191.      private variable Format = "/tmp/foo-$time.$pid";
  2192.      define make_filename ()
  2193.      {
  2194.         variable pid = getpid ();
  2195.         variable time = _time ();
  2196.         return _$(Format);
  2197.      }
  2198.  
  2199.  Note that the variable `Format' contains dollar-escaped
  2200.  variables, but because the `$' suffix was omitted from the
  2201.  string literal, the variables are not expanded.  Instead expansion is
  2202.  deferred until execution of the `make_filename' function through
  2203.  the use of the `_$' function.
  2204.  
  2205.  SEE ALSO
  2206.   eval, getenv
  2207.  
  2208. --------------------------------------------------------------
  2209.  
  2210. autoload
  2211.  
  2212.  SYNOPSIS
  2213.   Load a function from a file
  2214.  
  2215.  USAGE
  2216.   autoload (String_Type funct, String_Type file)
  2217.  
  2218.  DESCRIPTION
  2219.   The `autoload' function is used to declare `funct' to the
  2220.   interpreter and indicate that it should be loaded from `file'
  2221.   when it is actually used.  If `func' contains a namespace
  2222.   prefix, then the file will be loaded into the corresponding
  2223.   namespace.  Otherwise, if the `autoload' function is called
  2224.   from an execution namespace that is not the Global namespace nor an
  2225.   anonymous namespace, then the file will be loaded into the execution
  2226.   namespace.
  2227.  
  2228.  EXAMPLE
  2229.     Suppose `bessel_j0' is a function defined in the file
  2230.     `bessel.sl'.  Then the statement
  2231.  
  2232.       autoload ("bessel_j0", "bessel.sl");
  2233.  
  2234.     will cause `bessel.sl' to be loaded prior to the execution of
  2235.     `bessel_j0'.
  2236.  
  2237.  SEE ALSO
  2238.   evalfile, import
  2239.  
  2240. --------------------------------------------------------------
  2241.  
  2242. byte_compile_file
  2243.  
  2244.  SYNOPSIS
  2245.   Compile a file to byte-code for faster loading.
  2246.  
  2247.  USAGE
  2248.   byte_compile_file (String_Type file, Int_Type method)
  2249.  
  2250.  DESCRIPTION
  2251.   The `byte_compile_file' function byte-compiles `file'
  2252.   producing a new file with the same name except a `'c'' is added
  2253.   to the output file name.  For example, `file' is
  2254.   `"site.sl"', then this function produces a new file named
  2255.   `site.slc'.
  2256.  
  2257.  NOTES
  2258.   The `method' parameter is not used in the current
  2259.   implementation, but may be in the future.  For now, set
  2260.   it to `0'.
  2261.  
  2262.  SEE ALSO
  2263.   evalfile
  2264.  
  2265. --------------------------------------------------------------
  2266.  
  2267. eval
  2268.  
  2269.  SYNOPSIS
  2270.   Interpret a string as S-Lang code
  2271.  
  2272.  USAGE
  2273.   eval (String_Type expression [,String_Type namespace])
  2274.  
  2275.  DESCRIPTION
  2276.   The `eval' function parses a string as S-Lang code and executes the
  2277.   result.  If called with the optional namespace argument, then the
  2278.   string will be evaluated in the specified namespace.  If that
  2279.   namespace does not exist it will be created first.
  2280.  
  2281.   This is a useful function in many contexts including those where
  2282.   it is necessary to dynamically generate function definitions.
  2283.  
  2284.  EXAMPLE
  2285.  
  2286.     if (0 == is_defined ("my_function"))
  2287.       eval ("define my_function () { message (\"my_function\"); }");
  2288.  
  2289.  
  2290.  SEE ALSO
  2291.   is_defined, autoload, evalfile
  2292.  
  2293. --------------------------------------------------------------
  2294.  
  2295. evalfile
  2296.  
  2297.  SYNOPSIS
  2298.   Interpret a file containing S-Lang code
  2299.  
  2300.  USAGE
  2301.   Int_Type evalfile (String_Type file [,String_Type namespace])
  2302.  
  2303.  DESCRIPTION
  2304.   The `evalfile' function loads `file' into the interpreter
  2305.   and executes it.  If called with the optional namespace argument,
  2306.   the file will be loaded into the specified namespace, which will be
  2307.   created if necessary.  If given no namespace argument and the file
  2308.   has already been loaded, then it will be loaded again into an
  2309.   anonymous namespace.  A namespace argument given by the empty string
  2310.   will also cause the file to be loaded into a new anonymous namespace.
  2311.  
  2312.   If no errors were encountered, 1 will be returned; otherwise,
  2313.   a S-Lang exception will be thrown and the function will return zero.
  2314.  
  2315.  EXAMPLE
  2316.  
  2317.     define load_file (file)
  2318.     {
  2319.        try
  2320.        {
  2321.          () = evalfile (file);
  2322.        }
  2323.        catch AnyError;
  2324.     }
  2325.  
  2326.  
  2327.  NOTES
  2328.   For historical reasons, the return value of this function is not
  2329.   really useful.
  2330.  
  2331.   The file is searched along an application-defined load-path.  The
  2332.   `get_slang_load_path' and `set_slang_load_path' functions
  2333.   may be used to set and query the path.
  2334.  
  2335.  SEE ALSO
  2336.   eval, autoload, set_slang_load_path, get_slang_load_path
  2337.  
  2338. --------------------------------------------------------------
  2339.  
  2340. get_slang_load_path
  2341.  
  2342.  SYNOPSIS
  2343.   Get the value of the interpreter's load-path
  2344.  
  2345.  USAGE
  2346.   String_Type get_slang_load_path ()
  2347.  
  2348.  DESCRIPTION
  2349.   This function retrieves the value of the delimiter-separated search
  2350.   path used for loading files.  The delimiter is OS-specific and may
  2351.   be queried using the `path_get_delimiter' function.
  2352.  
  2353.  NOTES
  2354.   Some applications may not support the built-in load-path searching
  2355.   facility provided by the underlying library.
  2356.  
  2357.  SEE ALSO
  2358.   set_slang_load_path, path_get_delimiter
  2359.  
  2360. --------------------------------------------------------------
  2361.  
  2362. set_slang_load_path
  2363.  
  2364.  SYNOPSIS
  2365.   Set the value of the interpreter's load-path
  2366.  
  2367.  USAGE
  2368.   set_slang_load_path (String_Type path)
  2369.  
  2370.  DESCRIPTION
  2371.   This function may be used to set the value of the
  2372.   delimiter-separated search path used by the `evalfile' and
  2373.   `autoload' functions for locating files.  The delimiter is
  2374.   OS-specific and may be queried using the `path_get_delimiter'
  2375.   function.
  2376.  
  2377.  EXAMPLE
  2378.  
  2379.     public define prepend_to_slang_load_path (p)
  2380.     {
  2381.        variable s = stat_file (p);
  2382.        if (s == NULL) return;
  2383.        if (0 == stat_is ("dir", s.st_mode))
  2384.          return;
  2385.  
  2386.        p = sprintf ("%s%c%s", p, path_get_delimiter (), get_slang_load_path ());
  2387.        set_slang_load_path (p);
  2388.     }
  2389.  
  2390.  
  2391.  NOTES
  2392.   Some applications may not support the built-in load-path searching
  2393.   facility provided by the underlying library.
  2394.  
  2395.  SEE ALSO
  2396.   get_slang_load_path, path_get_delimiter, evalfile, autoload
  2397.  
  2398. --------------------------------------------------------------
  2399.  
  2400. get_import_module_path
  2401.  
  2402.  SYNOPSIS
  2403.   Get the search path for dynamically loadable objects
  2404.  
  2405.  USAGE
  2406.   String_Type get_import_module_path ()
  2407.  
  2408.  DESCRIPTION
  2409.   The `get_import_module_path' may be used to get the search path
  2410.   for dynamically shared objects.  Such objects may be made accessible
  2411.   to the application via the `import' function.
  2412.  
  2413.  SEE ALSO
  2414.   import, set_import_module_path
  2415.  
  2416. --------------------------------------------------------------
  2417.  
  2418. import
  2419.  
  2420.  SYNOPSIS
  2421.   Dynamically link to a specified module
  2422.  
  2423.  USAGE
  2424.   import (String_Type module [, String_Type namespace])
  2425.  
  2426.  DESCRIPTION
  2427.   The `import' function causes the run-time linker to dynamically
  2428.   link to the shared object specified by the `module' parameter.
  2429.   It searches for the shared object as follows: First a search is
  2430.   performed along all module paths specified by the application.  Then
  2431.   a search is made along the paths defined via the
  2432.   `set_import_module_path' function.  If not found, a search is
  2433.   performed along the paths given by the `SLANG_MODULE_PATH'
  2434.   environment variable.  Finally, a system dependent search is
  2435.   performed (e.g., using the `LD_LIBRARY_PATH' environment
  2436.   variable).
  2437.  
  2438.   The optional second parameter may be used to specify a namespace
  2439.   for the intrinsic functions and variables of the module.  If this
  2440.   parameter is not present, the intrinsic objects will be placed into
  2441.   the active namespace, or global namespace if the active namespace is
  2442.   anonymous.
  2443.  
  2444.   This function throws an `ImportError' if the specified module is
  2445.   not found.
  2446.  
  2447.  NOTES
  2448.   The `import' function is not available on all systems.
  2449.  
  2450.  SEE ALSO
  2451.   set_import_module_path, use_namespace, current_namespace, getenv, evalfile
  2452.  
  2453. --------------------------------------------------------------
  2454.  
  2455. set_import_module_path
  2456.  
  2457.  SYNOPSIS
  2458.   Set the search path for dynamically loadable objects
  2459.  
  2460.  USAGE
  2461.   set_import_module_path (String_Type path_list)
  2462.  
  2463.  DESCRIPTION
  2464.   The `set_import_module_path' may be used to set the search path
  2465.   for dynamically shared objects.  Such objects may be made accessible
  2466.   to the application via the `import' function.
  2467.  
  2468.   The actual syntax for the specification of the set of paths will
  2469.   vary according to the operating system.  Under Unix, a colon
  2470.   character is used to separate paths in `path_list'.  For win32
  2471.   systems a semi-colon is used.  The `path_get_delimiter'
  2472.   function may be used to get the value of the delimiter.
  2473.  
  2474.  SEE ALSO
  2475.   import, get_import_module_path, path_get_delimiter
  2476.  
  2477. --------------------------------------------------------------
  2478.  
  2479. add_doc_file
  2480.  
  2481.  SYNOPSIS
  2482.   Make a documentation file known to the help system
  2483.  
  2484.  USAGE
  2485.   add_doc_file (String_Type file)
  2486.  
  2487.  DESCRIPTION
  2488.   The `add_doc_file' is used to add a documentation file to the
  2489.   system.  Such files are searched by the
  2490.   `get_doc_string_from_file' function.  The `file' must be
  2491.   specified using the full path.
  2492.  
  2493.  SEE ALSO
  2494.   set_doc_files, get_doc_files, get_doc_string_from_file
  2495.  
  2496. --------------------------------------------------------------
  2497.  
  2498. _apropos
  2499.  
  2500.  SYNOPSIS
  2501.   Generate a list of functions and variables
  2502.  
  2503.  USAGE
  2504.   Array_Type _apropos (String_Type ns, String_Type s, Integer_Type flags)
  2505.  
  2506.  DESCRIPTION
  2507.   The `_apropos' function may be used to get a list of all defined
  2508.   objects in the namespace `ns' whose name matches the regular
  2509.   expression `s' and whose type matches those specified by
  2510.   `flags'.  It returns an array of strings containing the names
  2511.   matched.
  2512.  
  2513.   The second parameter `flags' is a bit mapped value whose bits
  2514.   are defined according to the following table
  2515.  
  2516.      1          Intrinsic Function
  2517.      2          User-defined Function
  2518.      4          Intrinsic Variable
  2519.      8          User-defined Variable
  2520.  
  2521.  
  2522.  EXAMPLE
  2523.  
  2524.     define apropos (s)
  2525.     {
  2526.       variable n, name, a;
  2527.       a = _apropos ("Global", s, 0xF);
  2528.  
  2529.       vmessage ("Found %d matches:", length (a));
  2530.       foreach name (a)
  2531.         message (name);
  2532.     }
  2533.  
  2534.   prints a list of all matches.
  2535.  
  2536.  NOTES
  2537.   If the namespace specifier `ns' is the empty string `""',
  2538.   then the namespace will default to the static namespace of the
  2539.   current compilation unit.
  2540.  
  2541.  SEE ALSO
  2542.   is_defined, sprintf, _get_namespaces
  2543.  
  2544. --------------------------------------------------------------
  2545.  
  2546. _function_name
  2547.  
  2548.  SYNOPSIS
  2549.   Returns the name of the currently executing function
  2550.  
  2551.  USAGE
  2552.   String_Type _function_name ()
  2553.  
  2554.  DESCRIPTION
  2555.   This function returns the name of the currently executing function.
  2556.   If called from top-level, it returns the empty string.
  2557.  
  2558.  SEE ALSO
  2559.   _trace_function, is_defined
  2560.  
  2561. --------------------------------------------------------------
  2562.  
  2563. __get_defined_symbols
  2564.  
  2565.  SYNOPSIS
  2566.   Get the symbols defined by the preprocessor
  2567.  
  2568.  USAGE
  2569.   Int_Type __get_defined_symbols ()
  2570.  
  2571.  DESCRIPTION
  2572.   The `__get_defined_symbols' functions is used to get the list of
  2573.   all the symbols defined by the S-Lang preprocessor.  It pushes each
  2574.   of the symbols on the stack followed by the number of items pushed.
  2575.  
  2576.  SEE ALSO
  2577.   is_defined, _apropos, _get_namespaces
  2578.  
  2579. --------------------------------------------------------------
  2580.  
  2581. get_doc_files
  2582.  
  2583.  SYNOPSIS
  2584.   Get the list of documentation files
  2585.  
  2586.  USAGE
  2587.   String_Type[] = get_doc_files ()
  2588.  
  2589.  DESCRIPTION
  2590.   The `get_doc_files' function returns the internal list of
  2591.   documentation files as an array of strings.
  2592.  
  2593.  SEE ALSO
  2594.   set_doc_files, add_doc_file, get_doc_string_from_file
  2595.  
  2596. --------------------------------------------------------------
  2597.  
  2598. get_doc_string_from_file
  2599.  
  2600.  SYNOPSIS
  2601.   Read documentation from a file
  2602.  
  2603.  USAGE
  2604.   String_Type get_doc_string_from_file ([String_Type f,] String_Type t)
  2605.  
  2606.  DESCRIPTION
  2607.   If called with two arguments, `get_doc_string_from_file' opens
  2608.   the documentation file `f' and searches it for topic `t'.
  2609.   Otherwise, it will search an internal list of documentation files
  2610.   looking for the documentation associated with the topic `t'.  If
  2611.   found, the documentation for `t' will be returned, otherwise the
  2612.   function will return NULL.
  2613.  
  2614.   Files may be added to the internal list via the `add_doc_file'
  2615.   or `set_doc_files' functions.
  2616.  
  2617.  SEE ALSO
  2618.   add_doc_file, set_doc_files, get_doc_files, _slang_doc_dir
  2619.  
  2620. --------------------------------------------------------------
  2621.  
  2622. _get_namespaces
  2623.  
  2624.  SYNOPSIS
  2625.   Returns a list of namespace names
  2626.  
  2627.  USAGE
  2628.   String_Type[] _get_namespaces ()
  2629.  
  2630.  DESCRIPTION
  2631.   This function returns a string array containing the names of the
  2632.   currently defined namespaces.
  2633.  
  2634.  SEE ALSO
  2635.   _apropos, use_namespace, implements, __get_defined_symbols
  2636.  
  2637. --------------------------------------------------------------
  2638.  
  2639. is_defined
  2640.  
  2641.  SYNOPSIS
  2642.   Determine if a variable or function is defined
  2643.  
  2644.  USAGE
  2645.   Integer_Type is_defined (String_Type name)
  2646.  
  2647.  DESCRIPTION
  2648.    This function is used to determine whether or not a function or
  2649.    variable of the given name has been defined.  If the specified name
  2650.    has not been defined, the function returns 0.  Otherwise, it
  2651.    returns a non-zero value that depends on the type of object
  2652.    attached to the name. Specifically, it returns one of the following
  2653.    values:
  2654.  
  2655.      +1     intrinsic function
  2656.      +2     slang function
  2657.      -1     intrinsic variable
  2658.      -2     slang variable
  2659.       0     undefined
  2660.  
  2661.  
  2662.  EXAMPLE
  2663.     Consider the function:
  2664.  
  2665.     define runhooks (hook)
  2666.     {
  2667.        if (2 == is_defined(hook)) eval(hook);
  2668.     }
  2669.  
  2670.     This function could be called from another S-Lang function to
  2671.     allow customization of that function, e.g., if the function
  2672.     represents a mode, the hook could be called to setup keybindings
  2673.     for the mode.
  2674.  
  2675.  SEE ALSO
  2676.   typeof, eval, autoload, __get_reference, __is_initialized
  2677.  
  2678. --------------------------------------------------------------
  2679.  
  2680. __is_initialized
  2681.  
  2682.  SYNOPSIS
  2683.   Determine whether or not a variable has a value
  2684.  
  2685.  USAGE
  2686.   Integer_Type __is_initialized (Ref_Type r)
  2687.  
  2688.  DESCRIPTION
  2689.    This function returns non-zero of the object referenced by `r'
  2690.    is initialized, i.e., whether it has a value.  It returns 0 if the
  2691.    referenced object has not been initialized.
  2692.  
  2693.  EXAMPLE
  2694.    The function:
  2695.  
  2696.     define zero ()
  2697.     {
  2698.        variable f;
  2699.        return __is_initialized (&f);
  2700.     }
  2701.  
  2702.   will always return zero, but
  2703.  
  2704.     define one ()
  2705.     {
  2706.        variable f = 0;
  2707.        return __is_initialized (&f);
  2708.     }
  2709.  
  2710.   will return one.
  2711.  
  2712.  SEE ALSO
  2713.   __get_reference, __uninitialize, is_defined, typeof, eval
  2714.  
  2715. --------------------------------------------------------------
  2716.  
  2717. _NARGS
  2718.  
  2719.  SYNOPSIS
  2720.   The number of parameters passed to a function
  2721.  
  2722.  USAGE
  2723.   Integer_Type _NARGS
  2724.    The value of the `_NARGS' variable represents the number of
  2725.    arguments passed to the function.  This variable is local to each
  2726.    function.
  2727.  
  2728.  EXAMPLE
  2729.    This example uses the `_NARGS' variable to print the list of
  2730.    values passed to the function:
  2731.  
  2732.      define print_values ()
  2733.      {
  2734.         variable arg;
  2735.  
  2736.         if (_NARGS == 0)
  2737.           {
  2738.              message ("Nothing to print");
  2739.              return;
  2740.           }
  2741.         foreach arg (__pop_args (_NARGS))
  2742.           vmessage ("Argument value is: %S", arg.value);
  2743.      }
  2744.  
  2745.  
  2746.  SEE ALSO
  2747.   __pop_args, __push_args, typeof
  2748.  
  2749. --------------------------------------------------------------
  2750.  
  2751. set_doc_files
  2752.  
  2753.  SYNOPSIS
  2754.   Set the internal list of documentation files
  2755.  
  2756.  USAGE
  2757.   set_doc_files (String_Type[] list)
  2758.  
  2759.  DESCRIPTION
  2760.   The `set_doc_files' function may be used to set the internal
  2761.   list of documentation files.  It takes a single parameter, which is
  2762.   required to be an array of strings.  The internal file list is set
  2763.   to the files specified by the elements of the array.
  2764.  
  2765.  EXAMPLE
  2766.   The following example shows how to add all the files in a specified
  2767.   directory to the internal list.  It makes use of the `glob'
  2768.   function that is distributed as part of `slsh'.
  2769.  
  2770.      files = glob ("/path/to/doc/files/*.sld");
  2771.      set_doc_files ([files, get_doc_files ()]);
  2772.  
  2773.  
  2774.  SEE ALSO
  2775.   get_doc_files, add_doc_file, get_doc_string_from_file
  2776.  
  2777. --------------------------------------------------------------
  2778.  
  2779. _slang_doc_dir
  2780.  
  2781.  SYNOPSIS
  2782.   Installed documentation directory
  2783.  
  2784.  USAGE
  2785.   String_Type _slang_doc_dir
  2786.  
  2787.  DESCRIPTION
  2788.    The `_slang_doc_dir' variable is a read-only variable that
  2789.    specifies the compile-time installation location of the S-Lang
  2790.    documentation.
  2791.  
  2792.  SEE ALSO
  2793.   get_doc_string_from_file
  2794.  
  2795. --------------------------------------------------------------
  2796.  
  2797. _slang_version
  2798.  
  2799.  SYNOPSIS
  2800.   The S-Lang library version number
  2801.  
  2802.  USAGE
  2803.   Integer_Type _slang_version
  2804.  
  2805.  DESCRIPTION
  2806.    `_slang_version' is a read-only variable that gives the version
  2807.    number of the S-Lang library.
  2808.  
  2809.  SEE ALSO
  2810.   _slang_version_string
  2811.  
  2812. --------------------------------------------------------------
  2813.  
  2814. _slang_version_string
  2815.  
  2816.  SYNOPSIS
  2817.   The S-Lang library version number as a string
  2818.  
  2819.  USAGE
  2820.   String_Type _slang_version_string
  2821.  
  2822.  DESCRIPTION
  2823.   `_slang_version_string' is a read-only variable that gives a
  2824.   string representation of the version number of the S-Lang library.
  2825.  
  2826.  SEE ALSO
  2827.   _slang_version
  2828.  
  2829. --------------------------------------------------------------
  2830.  
  2831. list_append
  2832.  
  2833.  SYNOPSIS
  2834.   Append an object to a list
  2835.  
  2836.  USAGE
  2837.   list_append (List_Type list, object [,Int_Type nth])
  2838.  
  2839.  DESCRIPTION
  2840.   The `list_append' function is like `list_insert' except
  2841.   this function appends the object to the the list.  The optional
  2842.   argument `nth' may be used to specify where the object is to be
  2843.   appended.  See the documentation on `list_insert' for more details.
  2844.  
  2845.  SEE ALSO
  2846.   list_insert, list_delete, list_pop, list_new, list_reverse
  2847.  
  2848. --------------------------------------------------------------
  2849.  
  2850. list_delete
  2851.  
  2852.  SYNOPSIS
  2853.   Remove an item from a list
  2854.  
  2855.  USAGE
  2856.   list_delete (List_Type list, Int_Type nth)
  2857.  
  2858.  DESCRIPTION
  2859.   This function removes the `nth' item in the specified list.
  2860.   The first item in the list corresponds to a value of `nth'
  2861.   equal to zero.  If `nth' is negative, then the indexing is with
  2862.   respect to the end of the list with the last item corresponding to
  2863.   `nth' equal to -1.
  2864.  
  2865.  SEE ALSO
  2866.   list_insert, list_append, list_pop, list_new, list_reverse
  2867.  
  2868. --------------------------------------------------------------
  2869.  
  2870. list_insert
  2871.  
  2872.  SYNOPSIS
  2873.   Insert an item into a list
  2874.  
  2875.  USAGE
  2876.   list_insert (List_Type list, object [,Int_Type nth])
  2877.  
  2878.  DESCRIPTION
  2879.   This function may be used to insert an object into the specified
  2880.   list.  With just two arguments, the object will be inserted at the
  2881.   beginning of the list.  The optional third argument, `nth', may
  2882.   be used to specify the insertion point.  The first item in the list
  2883.   corresponds to a value of `nth' equal to zero.  If `nth'
  2884.   is negative, then the indexing is with respect to the end of the
  2885.   list with the last item given by a value of `nth' equal to -1.
  2886.  
  2887.  NOTES
  2888.   It is important to note that
  2889.  
  2890.     list_insert (list, object, 0);
  2891.  
  2892.   is not the same as
  2893.  
  2894.     list = {object, list}
  2895.  
  2896.   since the latter creates a new list with two items, `object'
  2897.   and the old list.
  2898.  
  2899.  SEE ALSO
  2900.   list_append, list_pop, list_delete, list_new, list_reverse
  2901.  
  2902. --------------------------------------------------------------
  2903.  
  2904. list_new
  2905.  
  2906.  SYNOPSIS
  2907.   Create a new list
  2908.  
  2909.  USAGE
  2910.   List_Type list_new ()
  2911.  
  2912.  DESCRIPTION
  2913.   This function creates a new empty List_Type object.  Such a
  2914.   list may also be created using the syntax
  2915.  
  2916.      list = {};
  2917.  
  2918.  
  2919.  SEE ALSO
  2920.   list_delete, list_insert, list_append, list_reverse, list_pop
  2921.  
  2922. --------------------------------------------------------------
  2923.  
  2924. list_pop
  2925.  
  2926.  SYNOPSIS
  2927.   Extract an item from a list
  2928.  
  2929.  USAGE
  2930.   object = list_pop (List_Type list [, Int_Type nth])
  2931.  
  2932.  DESCRIPTION
  2933.   The `list_pop' function returns a object from a list deleting
  2934.   the item from the list in the process.  If the second argument is
  2935.   present, then it may be used to specify the position in the list
  2936.   where the item is to be obtained.  If called with a single argument,
  2937.   the first item in the list will be used.
  2938.  
  2939.  SEE ALSO
  2940.   list_delete, list_insert, list_append, list_reverse, list_new
  2941.  
  2942. --------------------------------------------------------------
  2943.  
  2944. list_reverse
  2945.  
  2946.  SYNOPSIS
  2947.   Reverse a list
  2948.  
  2949.  USAGE
  2950.   list_reverse (List_Type list)
  2951.  
  2952.  DESCRIPTION
  2953.   This function may be used to reverse the items in list.
  2954.  
  2955.  NOTES
  2956.   This function does not create a new list.  The list passed to the
  2957.   function will be reversed upon return from the function.  If it is
  2958.   desired to create a separate reversed list, then a separate copy
  2959.   should be made, e.g.,
  2960.  
  2961.      rev_list = @list;
  2962.      list_reverse (rev_list);
  2963.  
  2964.  
  2965.  SEE ALSO
  2966.   list_new, list_insert, list_append, list_delete, list_pop
  2967.  
  2968. --------------------------------------------------------------
  2969.  
  2970. abs
  2971.  
  2972.  SYNOPSIS
  2973.   Compute the absolute value of a number
  2974.  
  2975.  USAGE
  2976.   y = abs(x)
  2977.  
  2978.  DESCRIPTION
  2979.   The `abs' function returns the absolute value of an arithmetic
  2980.   type.  If its argument is a complex number (Complex_Type),
  2981.   then it returns the modulus.  If the argument is an array, a new
  2982.   array will be created whose elements are obtained from the original
  2983.   array by using the `abs' function.
  2984.  
  2985.  SEE ALSO
  2986.   sign, sqr
  2987.  
  2988. --------------------------------------------------------------
  2989.  
  2990. acos
  2991.  
  2992.  SYNOPSIS
  2993.   Compute the arc-cosine of a number
  2994.  
  2995.  USAGE
  2996.   y = acos (x)
  2997.  
  2998.  DESCRIPTION
  2999.   The `acos' function computes the arc-cosine of a number and
  3000.   returns the result.  If its argument is an array, the
  3001.   `acos' function will be applied to each element and the result returned
  3002.   as an array.
  3003.  
  3004.  SEE ALSO
  3005.   cos, atan, acosh, cosh
  3006.  
  3007. --------------------------------------------------------------
  3008.  
  3009. acosh
  3010.  
  3011.  SYNOPSIS
  3012.   Compute the inverse cosh of a number
  3013.  
  3014.  USAGE
  3015.   y = acosh (x)
  3016.  
  3017.  DESCRIPTION
  3018.   The `acosh' function computes the inverse hyperbolic cosine of a number and
  3019.   returns the result.  If its argument is an array, the
  3020.   `acosh' function will be applied to each element and the result returned
  3021.   as an array.
  3022.  
  3023.  SEE ALSO
  3024.   cos, atan, acosh, cosh
  3025.  
  3026. --------------------------------------------------------------
  3027.  
  3028. asin
  3029.  
  3030.  SYNOPSIS
  3031.   Compute the arc-sine of a number
  3032.  
  3033.  USAGE
  3034.   y = asin (x)
  3035.  
  3036.  DESCRIPTION
  3037.   The `asin' function computes the arc-sine of a number and
  3038.   returns the result.  If its argument is an array, the
  3039.   `asin' function will be applied to each element and the result returned
  3040.   as an array.
  3041.  
  3042.  SEE ALSO
  3043.   cos, atan, acosh, cosh
  3044.  
  3045. --------------------------------------------------------------
  3046.  
  3047. asinh
  3048.  
  3049.  SYNOPSIS
  3050.   Compute the inverse-sinh of a number
  3051.  
  3052.  USAGE
  3053.   y = asinh (x)
  3054.  
  3055.  DESCRIPTION
  3056.   The `asinh' function computes the inverse hyperbolic sine of a number and
  3057.   returns the result.  If its argument is an array, the
  3058.   `asinh' function will be applied to each element and the result returned
  3059.   as an array.
  3060.  
  3061.  SEE ALSO
  3062.   cos, atan, acosh, cosh
  3063.  
  3064. --------------------------------------------------------------
  3065.  
  3066. atan
  3067.  
  3068.  SYNOPSIS
  3069.   Compute the arc-tangent of a number
  3070.  
  3071.  USAGE
  3072.   y = atan (x)
  3073.  
  3074.  DESCRIPTION
  3075.   The `atan' function computes the arc-tangent of a number and
  3076.   returns the result.  If its argument is an array, the
  3077.   `atan' function will be applied to each element and the result returned
  3078.   as an array.
  3079.  
  3080.  SEE ALSO
  3081.   atan2, cos, acosh, cosh
  3082.  
  3083. --------------------------------------------------------------
  3084.  
  3085. atan2
  3086.  
  3087.  SYNOPSIS
  3088.   Compute the arc-tangent of the ratio of two variables
  3089.  
  3090.  USAGE
  3091.   z = atan2 (y, x)
  3092.  
  3093.  DESCRIPTION
  3094.   The `atan2' function computes the arc-tangent of the ratio
  3095.   `y/x' and returns the result as a value that has the
  3096.   proper sign for the quadrant where the point (x,y) is located.  The
  3097.   returned value `z' will satisfy (-PI < z <= PI).  If either of the
  3098.   arguments is an array, an array of the corresponding values will be returned.
  3099.  
  3100.  SEE ALSO
  3101.   hypot, cos, atan, acosh, cosh
  3102.  
  3103. --------------------------------------------------------------
  3104.  
  3105. atanh
  3106.  
  3107.  SYNOPSIS
  3108.   Compute the inverse-tanh of a number
  3109.  
  3110.  USAGE
  3111.   y = atanh (x)
  3112.  
  3113.  DESCRIPTION
  3114.   The `atanh' function computes the inverse hyperbolic tangent of a number and
  3115.   returns the result.  If its argument is an array, the
  3116.   `atanh' function will be applied to each element and the result returned
  3117.   as an array.
  3118.  
  3119.  SEE ALSO
  3120.   cos, atan, acosh, cosh
  3121.  
  3122. --------------------------------------------------------------
  3123.  
  3124. ceil
  3125.  
  3126.  SYNOPSIS
  3127.   Round x up to the nearest integral value
  3128.  
  3129.  USAGE
  3130.   y = ceil (x)
  3131.  
  3132.  DESCRIPTION
  3133.   This function rounds its numeric argument up to the nearest integral
  3134.   value. If the argument is an array, the corresponding array will be
  3135.   returned.
  3136.  
  3137.  SEE ALSO
  3138.   floor, round
  3139.  
  3140. --------------------------------------------------------------
  3141.  
  3142. Conj
  3143.  
  3144.  SYNOPSIS
  3145.   Compute the complex conjugate of a number
  3146.  
  3147.  USAGE
  3148.   z1 = Conj (z)
  3149.  
  3150.  DESCRIPTION
  3151.   The `Conj' function returns the complex conjugate of a number.
  3152.   If its argument is an array, the `Conj' function will be applied to each
  3153.   element and the result returned as an array.
  3154.  
  3155.  SEE ALSO
  3156.   Real, Imag, abs
  3157.  
  3158. --------------------------------------------------------------
  3159.  
  3160. cos
  3161.  
  3162.  SYNOPSIS
  3163.   Compute the cosine of a number
  3164.  
  3165.  USAGE
  3166.   y = cos (x)
  3167.  
  3168.  DESCRIPTION
  3169.   The `cos' function computes the cosine of a number and
  3170.   returns the result.  If its argument is an array, the
  3171.   `cos' function will be applied to each element and the result returned
  3172.   as an array.
  3173.  
  3174.  SEE ALSO
  3175.   cos, atan, acosh, cosh
  3176.  
  3177. --------------------------------------------------------------
  3178.  
  3179. cosh
  3180.  
  3181.  SYNOPSIS
  3182.   Compute the hyperbolic cosine of a number
  3183.  
  3184.  USAGE
  3185.   y = cosh (x)
  3186.  
  3187.  DESCRIPTION
  3188.   The `cosh' function computes the hyperbolic cosine of a number and
  3189.   returns the result.  If its argument is an array, the
  3190.   `cosh' function will be applied to each element and the result returned
  3191.   as an array.
  3192.  
  3193.  SEE ALSO
  3194.   cos, atan, acosh, cosh
  3195.  
  3196. --------------------------------------------------------------
  3197.  
  3198. _diff
  3199.  
  3200.  SYNOPSIS
  3201.   Compute the absolute difference of two values
  3202.  
  3203.  USAGE
  3204.   y = _diff (x, y)
  3205.  
  3206.  DESCRIPTION
  3207.   The `_diff' function returns a floating point number equal to
  3208.   the absolute value of the difference of its two arguments.
  3209.   If either argument is an array, an array of the corresponding values
  3210.   will be returned.
  3211.  
  3212.  SEE ALSO
  3213.   abs
  3214.  
  3215. --------------------------------------------------------------
  3216.  
  3217. exp
  3218.  
  3219.  SYNOPSIS
  3220.   Compute the exponential of a number
  3221.  
  3222.  USAGE
  3223.   y = exp (x)
  3224.  
  3225.  DESCRIPTION
  3226.   The `exp' function computes the exponential of a number and
  3227.   returns the result.  If its argument is an array, the
  3228.   `exp' function will be applied to each element and the result returned
  3229.   as an array.
  3230.  
  3231.  SEE ALSO
  3232.   cos, atan, acosh, cosh
  3233.  
  3234. --------------------------------------------------------------
  3235.  
  3236. feqs
  3237.  
  3238.  SYNOPSIS
  3239.   Test the approximate equality of two numbers
  3240.  
  3241.  USAGE
  3242.   Char_Type feqs (a, b [,reldiff [,absdiff]]
  3243.  
  3244.  DESCRIPTION
  3245.  This function compares two floating point numbers `a' and
  3246.  `b', and returns a non-zero value if they are equal to within a
  3247.  specified tolerance; otherwise 0 will be returned.  If either is an
  3248.  array, a corresponding boolean array will be returned.
  3249.  
  3250.  The tolerances are specified as relative and absolute differences via
  3251.  the optional third and fourth arguments.  If no optional arguments
  3252.  are present, the tolerances default to `reldiff=0.01' and
  3253.  `absdiff=1e-6'.  If only the relative difference has been
  3254.  specified, the absolute difference (`absdiff') will be taken to
  3255.  be 0.0.
  3256.  
  3257.  For the case when `|b|>=|a|', `a' and `b' are
  3258.  considered to be equal to within the specified tolerances if either
  3259.  `|b-a|<=absdiff' or `|b-a|/|b|<=reldiff' is true.
  3260.  
  3261.  SEE ALSO
  3262.   fneqs, fgteqs, flteqs
  3263.  
  3264. --------------------------------------------------------------
  3265.  
  3266. fgteqs
  3267.  
  3268.  SYNOPSIS
  3269.   Compare two numbers using specified tolerances
  3270. .
  3271.  
  3272.  USAGE
  3273.   Char_Type feqs (a, b [,reldiff [,absdiff]]
  3274.  
  3275.  DESCRIPTION
  3276.   This function is functionally equivalent to:
  3277.  
  3278.      (a >= b) or feqs(a,b,...)
  3279.  
  3280.   See the documentation of `feqs' for more information.
  3281.  
  3282.  SEE ALSO
  3283.   feqs, fneqs, flteqs
  3284.  
  3285. --------------------------------------------------------------
  3286.  
  3287. floor
  3288.  
  3289.  SYNOPSIS
  3290.   Round x down to the nearest integer
  3291.  
  3292.  USAGE
  3293.   y = floor (x)
  3294.  
  3295.  DESCRIPTION
  3296.   This function rounds its numeric argument down to the nearest
  3297.   integral value. If the argument is an array, the corresponding array
  3298.   will be returned.
  3299.  
  3300.  SEE ALSO
  3301.   ceil, round, nint
  3302.  
  3303. --------------------------------------------------------------
  3304.  
  3305. flteqs
  3306.  
  3307.  SYNOPSIS
  3308.   Compare two numbers using specified tolerances
  3309. .
  3310.  
  3311.  USAGE
  3312.   Char_Type feqs (a, b [,reldiff [,absdiff]]
  3313.  
  3314.  DESCRIPTION
  3315.   This function is functionally equivalent to:
  3316.  
  3317.      (a <= b) or feqs(a,b,...)
  3318.  
  3319.   See the documentation of `feqs' for more information.
  3320.  
  3321.  SEE ALSO
  3322.   feqs, fneqs, fgteqs
  3323.  
  3324. --------------------------------------------------------------
  3325.  
  3326. fneqs
  3327.  
  3328.  SYNOPSIS
  3329.   Test the approximate inequality of two numbers
  3330.  
  3331.  USAGE
  3332.   Char_Type feqs (a, b [,reldiff [,absdiff]]
  3333.  
  3334.  DESCRIPTION
  3335.   This function is functionally equivalent to:
  3336.  
  3337.     not fneqs(a,b,...)
  3338.  
  3339.   See the documentation of `feqs' for more information.
  3340.  
  3341.  SEE ALSO
  3342.   feqs, fgteqs, flteqs
  3343.  
  3344. --------------------------------------------------------------
  3345.  
  3346. hypot
  3347.  
  3348.  SYNOPSIS
  3349.   Compute sqrt(x^2+y^2)
  3350.  
  3351.  USAGE
  3352.   r = hypot (x, y)
  3353.  
  3354.  DESCRIPTION
  3355.   The `hypot' function computes the quantity `sqrt(x^2+y^2)'
  3356.   except that it employs an algorithm that tries to avoid arithmetic
  3357.   overflow when `x' or `y' are large.  If either argument is
  3358.   an array, an array of the corresponding values will be returned.
  3359.  
  3360.  SEE ALSO
  3361.   atan2, cos, atan, acosh, cosh
  3362.  
  3363. --------------------------------------------------------------
  3364.  
  3365. Imag
  3366.  
  3367.  SYNOPSIS
  3368.   Compute the imaginary part of a number
  3369.  
  3370.  USAGE
  3371.   i = Imag (z)
  3372.  
  3373.  DESCRIPTION
  3374.   The `Imag' function returns the imaginary part of a number.
  3375.   If its argument is an array, the `Imag' function will be applied to each
  3376.   element and the result returned as an array.
  3377.  
  3378.  SEE ALSO
  3379.   Real, Conj, abs
  3380.  
  3381. --------------------------------------------------------------
  3382.  
  3383. isinf
  3384.  
  3385.  SYNOPSIS
  3386.   Test for infinity
  3387.  
  3388.  USAGE
  3389.   y = isinf (x)
  3390.  
  3391.  DESCRIPTION
  3392.   This function returns 1 if x corresponds to an IEEE infinity, or 0
  3393.   otherwise. If the argument is an array, an array of the
  3394.   corresponding values will be returned.
  3395.  
  3396.  SEE ALSO
  3397.   isnan, _Inf
  3398.  
  3399. --------------------------------------------------------------
  3400.  
  3401. isnan
  3402.  
  3403.  SYNOPSIS
  3404.   isnan
  3405.  
  3406.  USAGE
  3407.   y = isnan (x)
  3408.  
  3409.  DESCRIPTION
  3410.   This function returns 1 if x corresponds to an IEEE NaN (Not a Number),
  3411.   or 0 otherwise.  If the argument is an array, an array of
  3412.   the corresponding values will be returned.
  3413.  
  3414.  SEE ALSO
  3415.   isinf, _NaN
  3416.  
  3417. --------------------------------------------------------------
  3418.  
  3419. log
  3420.  
  3421.  SYNOPSIS
  3422.   Compute the logarithm of a number
  3423.  
  3424.  USAGE
  3425.   y = log (x)
  3426.  
  3427.  DESCRIPTION
  3428.   The `log' function computes the natural logarithm of a number and
  3429.   returns the result.  If its argument is an array, the
  3430.   `log' function will be applied to each element and the result returned
  3431.   as an array.
  3432.  
  3433.  SEE ALSO
  3434.   cos, atan, acosh, cosh
  3435.  
  3436. --------------------------------------------------------------
  3437.  
  3438. log10
  3439.  
  3440.  SYNOPSIS
  3441.   Compute the base-10 logarithm of a number
  3442.  
  3443.  USAGE
  3444.   y = log10 (x)
  3445.  
  3446.  DESCRIPTION
  3447.   The `log10' function computes the base-10 logarithm of a number and
  3448.   returns the result.  If its argument is an array, the
  3449.   `log10' function will be applied to each element and the result returned
  3450.   as an array.
  3451.  
  3452.  SEE ALSO
  3453.   cos, atan, acosh, cosh
  3454.  
  3455. --------------------------------------------------------------
  3456.  
  3457. _max
  3458.  
  3459.  SYNOPSIS
  3460.   Compute the maximum of two values
  3461.  
  3462.  USAGE
  3463.   z = _max (x,y)
  3464.  
  3465.  DESCRIPTION
  3466.   The `_max' function returns a floating point number equal to the
  3467.   maximum value of its two arguments.
  3468.   If either argument is an array, an array of the corresponding values
  3469.   will be returned.
  3470.  
  3471.  NOTES
  3472.   This function returns a floating point result even when both
  3473.   arguments are integers.
  3474.  
  3475.  SEE ALSO
  3476.   max, _min, min
  3477.  
  3478. --------------------------------------------------------------
  3479.  
  3480. _min
  3481.  
  3482.  SYNOPSIS
  3483.   Compute the minimum of two values
  3484.  
  3485.  USAGE
  3486.   z = _min (x,y)
  3487.  
  3488.  DESCRIPTION
  3489.   The `_min' function returns a floating point number equal to the
  3490.   minimum value of its two arguments.
  3491.   If either argument is an array, an array of the corresponding values
  3492.   will be returned.
  3493.  
  3494.  NOTES
  3495.   This function returns a floating point result even when both
  3496.   arguments are integers.
  3497.  
  3498.  SEE ALSO
  3499.   min, _max, max
  3500.  
  3501. --------------------------------------------------------------
  3502.  
  3503. mul2
  3504.  
  3505.  SYNOPSIS
  3506.   Multiply a number by 2
  3507.  
  3508.  USAGE
  3509.   y = mul2(x)
  3510.  
  3511.  DESCRIPTION
  3512.   The `mul2' function multiplies an arithmetic type by two and
  3513.   returns the result.  If its argument is an array, a new array will
  3514.   be created whose elements are obtained from the original array by
  3515.   using the `mul2' function.
  3516.  
  3517.  SEE ALSO
  3518.   sqr, abs
  3519.  
  3520. --------------------------------------------------------------
  3521.  
  3522. nint
  3523.  
  3524.  SYNOPSIS
  3525.   Round to the nearest integer
  3526.  
  3527.  USAGE
  3528.   i = nint(x)
  3529.  
  3530.  DESCRIPTION
  3531.   The `nint' rounds its argument to the nearest integer and
  3532.   returns the result.  If its argument is an array, a new array will
  3533.   be created whose elements are obtained from the original array
  3534.   elements by using the `nint' function.
  3535.  
  3536.  SEE ALSO
  3537.   round, floor, ceil
  3538.  
  3539. --------------------------------------------------------------
  3540.  
  3541. polynom
  3542.  
  3543.  SYNOPSIS
  3544.   Evaluate a polynomial
  3545.  
  3546.  USAGE
  3547.   Double_Type polynom(Double_Type a, b, ...c, Integer_Type n, Double_Type x)
  3548.  
  3549.  DESCRIPTION
  3550.   The `polynom' function returns the value of the polynomial expression:
  3551.  
  3552.      ax^n + bx^(n - 1) + ... c
  3553.  
  3554.  
  3555.  NOTES
  3556.   The `polynom' function should be extended to work with complex
  3557.   and array data types.  The current implementation is limited to
  3558.   Double_Type quantities.
  3559.  
  3560.  SEE ALSO
  3561.   exp
  3562.  
  3563. --------------------------------------------------------------
  3564.  
  3565. Real
  3566.  
  3567.  SYNOPSIS
  3568.   Compute the real part of a number
  3569.  
  3570.  USAGE
  3571.   r = Real (z)
  3572.  
  3573.  DESCRIPTION
  3574.   The `Real' function returns the real part of a number. If its
  3575.   argument is an array, the `Real' function will be applied to
  3576.   each element and the result returned as an array.
  3577.  
  3578.  SEE ALSO
  3579.   Imag, Conj, abs
  3580.  
  3581. --------------------------------------------------------------
  3582.  
  3583. round
  3584.  
  3585.  SYNOPSIS
  3586.   Round to the nearest integral value
  3587.  
  3588.  USAGE
  3589.   y = round (x)
  3590.  
  3591.  DESCRIPTION
  3592.   This function rounds its argument to the nearest integral value and
  3593.   returns it as a floating point result. If the argument is an array,
  3594.   an array of the corresponding values will be returned.
  3595.  
  3596.  SEE ALSO
  3597.   floor, ceil, nint
  3598.  
  3599. --------------------------------------------------------------
  3600.  
  3601. set_float_format
  3602.  
  3603.  SYNOPSIS
  3604.   Set the format for printing floating point values.
  3605.  
  3606.  USAGE
  3607.   set_float_format (String_Type fmt)
  3608.  
  3609.  DESCRIPTION
  3610.   The `set_float_format' function is used to set the floating
  3611.   point format to be used when floating point numbers are printed.
  3612.   The routines that use this are the traceback routines and the
  3613.   `string' function, any anything based upon the `string'
  3614.   function. The default value is `"%g"'
  3615.  
  3616.  EXAMPLE
  3617.  
  3618.      s = string (PI);                %  --> s = "3.14159"
  3619.      set_float_format ("%16.10f");
  3620.      s = string (PI);                %  --> s = "3.1415926536"
  3621.      set_float_format ("%10.6e");
  3622.      s = string (PI);                %  --> s = "3.141593e+00"
  3623.  
  3624.  
  3625.  SEE ALSO
  3626.   string, sprintf, double
  3627.  
  3628. --------------------------------------------------------------
  3629.  
  3630. sign
  3631.  
  3632.  SYNOPSIS
  3633.   Compute the sign of a number
  3634.  
  3635.  USAGE
  3636.   y = sign(x)
  3637.  
  3638.  DESCRIPTION
  3639.   The `sign' function returns the sign of an arithmetic type.  If
  3640.   its argument is a complex number (Complex_Type), the
  3641.   `sign' will be applied to the imaginary part of the number.  If
  3642.   the argument is an array, a new array will be created whose elements
  3643.   are obtained from the original array by using the `sign'
  3644.   function.
  3645.  
  3646.   When applied to a real number or an integer, the `sign' function
  3647.   returns -1, 0, or `+1' according to whether the number is
  3648.   less than zero, equal to zero, or greater than zero, respectively.
  3649.  
  3650.  SEE ALSO
  3651.   abs
  3652.  
  3653. --------------------------------------------------------------
  3654.  
  3655. sin
  3656.  
  3657.  SYNOPSIS
  3658.   Compute the sine of a number
  3659.  
  3660.  USAGE
  3661.   y = sin (x)
  3662.  
  3663.  DESCRIPTION
  3664.   The `sin' function computes the sine of a number and
  3665.   returns the result.  If its argument is an array, the
  3666.   `sin' function will be applied to each element and the result returned
  3667.   as an array.
  3668.  
  3669.  SEE ALSO
  3670.   cos, atan, acosh, cosh
  3671.  
  3672. --------------------------------------------------------------
  3673.  
  3674. sinh
  3675.  
  3676.  SYNOPSIS
  3677.   Compute the hyperbolic sine of a number
  3678.  
  3679.  USAGE
  3680.   y = sinh (x)
  3681.  
  3682.  DESCRIPTION
  3683.   The `sinh' function computes the hyperbolic sine of a number and
  3684.   returns the result.  If its argument is an array, the
  3685.   `sinh' function will be applied to each element and the result returned
  3686.   as an array.
  3687.  
  3688.  SEE ALSO
  3689.   cos, atan, acosh, cosh
  3690.  
  3691. --------------------------------------------------------------
  3692.  
  3693. sqr
  3694.  
  3695.  SYNOPSIS
  3696.   Compute the square of a number
  3697.  
  3698.  USAGE
  3699.   y = sqr(x)
  3700.  
  3701.  DESCRIPTION
  3702.   The `sqr' function returns the square of an arithmetic type.  If its
  3703.   argument is a complex number (Complex_Type), then it returns
  3704.   the square of the modulus.  If the argument is an array, a new array
  3705.   will be created whose elements are obtained from the original array
  3706.   by using the `sqr' function.
  3707.  
  3708.  NOTES
  3709.   For real scalar numbers, using `x*x' instead of `sqr(x)'
  3710.   will result in faster executing code.  However, if `x' is an
  3711.   array, then `sqr(x)' will execute faster.
  3712.  
  3713.  SEE ALSO
  3714.   abs, mul2
  3715.  
  3716. --------------------------------------------------------------
  3717.  
  3718. sqrt
  3719.  
  3720.  SYNOPSIS
  3721.   Compute the square root of a number
  3722.  
  3723.  USAGE
  3724.   y = sqrt (x)
  3725.  
  3726.  DESCRIPTION
  3727.   The `sqrt' function computes the square root of a number and
  3728.   returns the result.  If its argument is an array, the
  3729.   `sqrt' function will be applied to each element and the result returned
  3730.   as an array.
  3731.  
  3732.  SEE ALSO
  3733.   sqr, cos, atan, acosh, cosh
  3734.  
  3735. --------------------------------------------------------------
  3736.  
  3737. tan
  3738.  
  3739.  SYNOPSIS
  3740.   Compute the tangent of a number
  3741.  
  3742.  USAGE
  3743.   y = tan (x)
  3744.  
  3745.  DESCRIPTION
  3746.   The `tan' function computes the tangent of a number and
  3747.   returns the result.  If its argument is an array, the
  3748.   `tan' function will be applied to each element and the result returned
  3749.   as an array.
  3750.  
  3751.  SEE ALSO
  3752.   cos, atan, acosh, cosh
  3753.  
  3754. --------------------------------------------------------------
  3755.  
  3756. tanh
  3757.  
  3758.  SYNOPSIS
  3759.   Compute the hyperbolic tangent of a number
  3760.  
  3761.  USAGE
  3762.   y = tanh (x)
  3763.  
  3764.  DESCRIPTION
  3765.   The `tanh' function computes the hyperbolic tangent of a number and
  3766.   returns the result.  If its argument is an array, the
  3767.   `tanh' function will be applied to each element and the result returned
  3768.   as an array.
  3769.  
  3770.  SEE ALSO
  3771.   cos, atan, acosh, cosh
  3772.  
  3773. --------------------------------------------------------------
  3774.  
  3775. _ispos
  3776.  
  3777.  SYNOPSIS
  3778.   Test if a number is greater than 0
  3779.  
  3780.  USAGE
  3781.   Char_Type _ispos(x)
  3782.  
  3783.  DESCRIPTION
  3784.   This function returns 1 if a number is greater than 0, and zero
  3785.   otherwise.  If the argument is an array, then the corresponding
  3786.   array of boolean (Char_Type) values will be returned.
  3787.  
  3788.  SEE ALSO
  3789.   _isneg, _isnonneg
  3790.  
  3791. --------------------------------------------------------------
  3792.  
  3793. _isneg
  3794.  
  3795.  SYNOPSIS
  3796.   Test if a number is less than 0
  3797.  
  3798.  USAGE
  3799.   Char_Type _isneg(x)
  3800.  
  3801.  DESCRIPTION
  3802.   This function returns 1 if a number is less than 0, and zero
  3803.   otherwise.  If the argument is an array, then the corresponding
  3804.   array of boolean (Char_Type) values will be returned.
  3805.  
  3806.  SEE ALSO
  3807.   _ispos, _isnonneg
  3808.  
  3809. --------------------------------------------------------------
  3810.  
  3811. _isnonneg
  3812.  
  3813.  SYNOPSIS
  3814.   Test if a number is greater than or equal to 0
  3815.  
  3816.  USAGE
  3817.   Char_Type _isnonneg(x)
  3818.  
  3819.  DESCRIPTION
  3820.   This function returns 1 if a number is greater or equal to 0, and zero
  3821.   otherwise.  If the argument is an array, then the corresponding
  3822.   array of boolean (Char_Type) values will be returned.
  3823.  
  3824.  SEE ALSO
  3825.   _isneg, _isnonneg
  3826.  
  3827. --------------------------------------------------------------
  3828.  
  3829. errno
  3830.  
  3831.  SYNOPSIS
  3832.   Error code set by system functions
  3833.  
  3834.  USAGE
  3835.   Int_Type errno
  3836.  
  3837.  DESCRIPTION
  3838.   A system function can fail for a variety of reasons.  For example, a
  3839.   file operation may fail because lack of disk space, or the process
  3840.   does not have permission to perform the operation.  Such functions
  3841.   will return -1 and set the variable `errno' to an error
  3842.   code describing the reason for failure.
  3843.  
  3844.   Particular values of `errno' may be specified by the following
  3845.   symbolic constants (read-only variables) and the corresponding
  3846.   `errno_string' value:
  3847.  
  3848.      EPERM            "Not owner"
  3849.      ENOENT           "No such file or directory"
  3850.      ESRCH            "No such process"
  3851.      ENXIO            "No such device or address"
  3852.      ENOEXEC          "Exec format error"
  3853.      EBADF            "Bad file number"
  3854.      ECHILD           "No children"
  3855.      ENOMEM           "Not enough core"
  3856.      EACCES           "Permission denied"
  3857.      EFAULT           "Bad address"
  3858.      ENOTBLK          "Block device required"
  3859.      EBUSY            "Mount device busy"
  3860.      EEXIST           "File exists"
  3861.      EXDEV            "Cross-device link"
  3862.      ENODEV           "No such device"
  3863.      ENOTDIR          "Not a directory"
  3864.      EISDIR           "Is a directory"
  3865.      EINVAL           "Invalid argument"
  3866.      ENFILE           "File table overflow"
  3867.      EMFILE           "Too many open files"
  3868.      ENOTTY           "Not a typewriter"
  3869.      ETXTBSY          "Text file busy"
  3870.      EFBIG            "File too large"
  3871.      ENOSPC           "No space left on device"
  3872.      ESPIPE           "Illegal seek"
  3873.      EROFS            "Read-only file system"
  3874.      EMLINK           "Too many links"
  3875.      EPIPE            "Broken pipe"
  3876.      ELOOP            "Too many levels of symbolic links"
  3877.      ENAMETOOLONG     "File name too long"
  3878.  
  3879.  
  3880.  EXAMPLE
  3881.   The `mkdir' function will attempt to create a directory.  If
  3882.   that directory already exists, the function will fail and set
  3883.   `errno' to EEXIST.
  3884.  
  3885.     define create_dir (dir)
  3886.     {
  3887.        if (0 == mkdir (dir)) return;
  3888.        if (errno != EEXIST)
  3889.          throw IOError, sprintf ("mkdir %s failed: %s",
  3890.                                   dir, errno_string (errno));
  3891.     }
  3892.  
  3893.  
  3894.  SEE ALSO
  3895.   errno_string, error, mkdir
  3896.  
  3897. --------------------------------------------------------------
  3898.  
  3899. errno_string
  3900.  
  3901.  SYNOPSIS
  3902.   Return a string describing an errno.
  3903.  
  3904.  USAGE
  3905.   String_Type errno_string ( [Int_Type err ])
  3906.  
  3907.  DESCRIPTION
  3908.   The `errno_string' function returns a string describing the
  3909.   integer errno code `err'.  If the `err' parameter is
  3910.   omitted, the current value of `errno' will be used. See the
  3911.   description for `errno' for more information.
  3912.  
  3913.  EXAMPLE
  3914.   The `errno_string' function may be used as follows:
  3915.  
  3916.     define sizeof_file (file)
  3917.     {
  3918.        variable st = stat_file (file);
  3919.        if (st == NULL)
  3920.          throw IOError, sprintf ("%s: %s", file, errno_string (errno));
  3921.        return st.st_size;
  3922.     }
  3923.  
  3924.  
  3925.  SEE ALSO
  3926.   errno, stat_file
  3927.  
  3928. --------------------------------------------------------------
  3929.  
  3930. error
  3931.  
  3932.  SYNOPSIS
  3933.   Generate an error condition (deprecated)
  3934.  
  3935.  USAGE
  3936.   error (String_Type msg
  3937.  
  3938.  DESCRIPTION
  3939.   This function has been deprecated in favor of `throw'.
  3940.  
  3941.   The `error' function generates a S-Lang `RunTimeError'
  3942.   exception. It takes a single string parameter which is displayed on
  3943.   the stderr output device.
  3944.  
  3945.  EXAMPLE
  3946.  
  3947.     define add_txt_extension (file)
  3948.     {
  3949.        if (typeof (file) != String_Type)
  3950.          error ("add_extension: parameter must be a string");
  3951.        file += ".txt";
  3952.        return file;
  3953.     }
  3954.  
  3955.  
  3956.  SEE ALSO
  3957.   verror, message
  3958.  
  3959. --------------------------------------------------------------
  3960.  
  3961. __get_exception_info
  3962.  
  3963.  SYNOPSIS
  3964.   Get information about the current exception
  3965.  
  3966.  USAGE
  3967.   Struct_Type __get_exception_info ()
  3968.  
  3969.  DESCRIPTION
  3970.  This function returns information about the currently active
  3971.  exception in the form as a structure with the
  3972.  following fields:
  3973.  
  3974.     error            The current exception, e.g., RunTimeError
  3975.     descr            A description of the exception
  3976.     file             Name of the file generating the exception
  3977.     line             Line number where the exception originated
  3978.     function         Function where the exception originated
  3979.     object           A user-defined object thrown by the exception
  3980.     message          A user-defined message
  3981.  
  3982.  If no exception is active, NULL will be returned.
  3983.  
  3984.  This same information may also be obtained via the optional argument
  3985.  to the `try' statement:
  3986.  
  3987.      variable e = NULL;
  3988.      try (e)
  3989.        {
  3990.           do_something ();
  3991.        }
  3992.      finally
  3993.        {
  3994.           if (e != NULL)
  3995.             vmessage ("An error occured: %s", e.message);
  3996.        }
  3997.  
  3998.  
  3999.  SEE ALSO
  4000.   error
  4001.  
  4002. --------------------------------------------------------------
  4003.  
  4004. message
  4005.  
  4006.  SYNOPSIS
  4007.   Print a string onto the message device
  4008.  
  4009.  USAGE
  4010.   message (String_Type s
  4011.  
  4012.  DESCRIPTION
  4013.   The `message' function will print the string specified by
  4014.   `s' onto the message device.
  4015.  
  4016.  EXAMPLE
  4017.  
  4018.      define print_current_time ()
  4019.      {
  4020.        message (time ());
  4021.      }
  4022.  
  4023.  
  4024.  NOTES
  4025.   The message device will depend upon the application.  For example,
  4026.   the output message device for the jed editor corresponds to the
  4027.   line at the bottom of the display window.  The default message
  4028.   device is the standard output device.
  4029.  
  4030.  SEE ALSO
  4031.   vmessage, sprintf, error
  4032.  
  4033. --------------------------------------------------------------
  4034.  
  4035. new_exception
  4036.  
  4037.  SYNOPSIS
  4038.   Create a new exception
  4039.  
  4040.  USAGE
  4041.   new_exception (String_Type name, Int_Type baseclass, String_Type descr)
  4042.  
  4043.  DESCRIPTION
  4044.   This function creates a new exception called `name' subclassed
  4045.   upon `baseclass'.  The description of the exception is
  4046.   specified by `descr'.
  4047.  
  4048.  EXAMPLE
  4049.  
  4050.   new_exception ("MyError", RunTimeError, "My very own error");
  4051.   try
  4052.     {
  4053.        if (something_is_wrong ())
  4054.          throw MyError;
  4055.     }
  4056.   catch RunTimeError;
  4057.  
  4058.   In this case, catching `RunTimeError' will also catch
  4059.   `MyError' since it is a subclass of `RunTimeError'.
  4060.  
  4061.  SEE ALSO
  4062.   error, verror
  4063.  
  4064. --------------------------------------------------------------
  4065.  
  4066. usage
  4067.  
  4068.  SYNOPSIS
  4069.   Generate a usage error
  4070.  
  4071.  USAGE
  4072.   usage (String_Type msg)
  4073.  
  4074.  DESCRIPTION
  4075.   The `usage' function generates a `UsageError' exception and
  4076.   displays `msg' to the message device.
  4077.  
  4078.  EXAMPLE
  4079.   Suppose that a function called `plot' plots an array of `x' and
  4080.   `y' values.  Then such a function could be written to issue a
  4081.   usage message if the wrong number of arguments was passed:
  4082.  
  4083.     define plot ()
  4084.     {
  4085.        variable x, y;
  4086.  
  4087.        if (_NARGS != 2)
  4088.          usage ("plot (x, y)");
  4089.  
  4090.        (x, y) = ();
  4091.        % Now do the hard part
  4092.           .
  4093.           .
  4094.     }
  4095.  
  4096.  
  4097.  SEE ALSO
  4098.   error, message
  4099.  
  4100. --------------------------------------------------------------
  4101.  
  4102. verror
  4103.  
  4104.  SYNOPSIS
  4105.   Generate an error condition (deprecated)
  4106.  
  4107.  USAGE
  4108.   verror (String_Type fmt, ...)
  4109.  
  4110.  DESCRIPTION
  4111.   This function has been deprecated in favor or `throw'.
  4112.  
  4113.   The `verror' function performs the same role as the `error'
  4114.   function.  The only difference is that instead of a single string
  4115.   argument, `verror' takes a sprintf style argument list.
  4116.  
  4117.  EXAMPLE
  4118.  
  4119.     define open_file (file)
  4120.     {
  4121.        variable fp;
  4122.  
  4123.        fp = fopen (file, "r");
  4124.        if (fp == NULL) verror ("Unable to open %s", file);
  4125.        return fp;
  4126.     }
  4127.  
  4128.  
  4129.  NOTES
  4130.   In the current implementation, the `verror' function is not an
  4131.   intrinsic function.  Rather it is a predefined S-Lang function using
  4132.   a combination of `sprintf' and `error'.
  4133.  
  4134.   To generate a specific exception, a `throw' statement should be
  4135.   used.  In fact, a `throw' statement such as:
  4136.  
  4137.      if (fp == NULL)
  4138.        throw OpenError, "Unable to open $file"$;
  4139.  
  4140.   is preferable to the use of `verror' in the above example.
  4141.  
  4142.  SEE ALSO
  4143.   error, Sprintf, vmessage
  4144.  
  4145. --------------------------------------------------------------
  4146.  
  4147. vmessage
  4148.  
  4149.  SYNOPSIS
  4150.   Print a formatted string onto the message device
  4151.  
  4152.  USAGE
  4153.   vmessage (String_Type fmt, ...)
  4154.  
  4155.  DESCRIPTION
  4156.   The `vmessage' function formats a sprintf style argument list
  4157.   and displays the resulting string onto the message device.
  4158.  
  4159.  NOTES
  4160.   In the current implementation, the `vmessage' function is not an
  4161.   intrinsic function.  Rather it is a predefined S-Lang function using
  4162.   a combination of `Sprintf' and `message'.
  4163.  
  4164.  SEE ALSO
  4165.   message, sprintf, Sprintf, verror
  4166.  
  4167. --------------------------------------------------------------
  4168.  
  4169. _auto_declare
  4170.  
  4171.  SYNOPSIS
  4172.   Set automatic variable declaration mode
  4173.  
  4174.  USAGE
  4175.   Integer_Type _auto_declare
  4176.  
  4177.  DESCRIPTION
  4178.   The `_auto_declare' variable may be used to have undefined
  4179.   variable implicitly declared.  If set to zero, any
  4180.   variable must be declared with a `variable' declaration before it
  4181.   can be used.  If set to one, then any undeclared variable will be
  4182.   declared as a `static' variable.
  4183.  
  4184.   The `_auto_declare' variable is local to each compilation unit and
  4185.   setting its value in one unit has no effect upon its value in other
  4186.   units.   The value of this variable has no effect upon the variables
  4187.   in a function.
  4188.  
  4189.  EXAMPLE
  4190.   The following code will not compile if `X' not been
  4191.   declared:
  4192.  
  4193.     X = 1;
  4194.  
  4195.   However,
  4196.  
  4197.     _auto_declare = 1;   % declare variables as static.
  4198.     X = 1;
  4199.  
  4200.   is equivalent to
  4201.  
  4202.     static variable X = 1;
  4203.  
  4204.  
  4205.  NOTES
  4206.   This variable should be used sparingly and is intended primarily for
  4207.   interactive applications where one types S-Lang commands at a
  4208.   prompt.
  4209.  
  4210. --------------------------------------------------------------
  4211.  
  4212. __class_id
  4213.  
  4214.  SYNOPSIS
  4215.   Return the class-id of a specified type
  4216.  
  4217.  USAGE
  4218.   Int_Type __class_id (DataType_Type type)
  4219.  
  4220.  DESCRIPTION
  4221.   This function returns the internal class-id of a specified data type.
  4222.  
  4223.  SEE ALSO
  4224.   typeof, _typeof, __class_type, __datatype
  4225.  
  4226. --------------------------------------------------------------
  4227.  
  4228. __class_type
  4229.  
  4230.  SYNOPSIS
  4231.   Return the class-type of a specified type
  4232.  
  4233.  USAGE
  4234.   Int_Type __class_type (DataType_Type type))
  4235.  
  4236.  DESCRIPTION
  4237.   Internally S-Lang objects are classified according to four types:
  4238.   scalar, vector, pointer, and memory managed types.  For example, an
  4239.   integer is implemented as a scalar, a complex number as a vector,
  4240.   and a string is represented as a pointer.  The `__class_type'
  4241.   function returns an integer representing the class-type associated
  4242.   with the specified data type. Specifically, it returns:
  4243.  
  4244.        0    memory-managed
  4245.        1    scalar
  4246.        2    vector
  4247.        3    pointer
  4248.  
  4249.  
  4250.  SEE ALSO
  4251.   typeof, _typeof, __class_id, __datatype
  4252.  
  4253. --------------------------------------------------------------
  4254.  
  4255. current_namespace
  4256.  
  4257.  SYNOPSIS
  4258.   Get the name of the current namespace
  4259.  
  4260.  USAGE
  4261.   String_Type current_namespace ()
  4262.  
  4263.  DESCRIPTION
  4264.    The `current_namespace' function returns the name of the
  4265.    static namespace associated with the compilation unit.  If there is
  4266.    no such namespace associated with the compilation unit, then the
  4267.    empty string `""' will be returned.
  4268.  
  4269.  SEE ALSO
  4270.   implements, use_namespace, import, evalfile
  4271.  
  4272. --------------------------------------------------------------
  4273.  
  4274. _eqs
  4275.  
  4276.  SYNOPSIS
  4277.   Test for equality of two objects
  4278.  
  4279.  USAGE
  4280.   Int_Type _eqs (a, b)
  4281.  
  4282.  DESCRIPTION
  4283.   This function tests its two arguments for equality and returns 1 if
  4284.   they are equal or 0 otherwise. What it means to be equal depends
  4285.   upon the data types of the objects being compared.  If the types are
  4286.   numeric, they are regarded as equal if their numerical values are
  4287.   equal.  If they are arrays, then they are equal if they have the
  4288.   same shape with equal elements. If they are structures, then they
  4289.   are equal if they contain identical fields, and the corresponding
  4290.   values are equal.
  4291.  
  4292.  EXAMPLE
  4293.    _eqs (1, 1)             ===> 1
  4294.    _eqs (1, 1.0)           ===> 1
  4295.    _eqs ("a", 1)           ===> 0
  4296.    _eqs ([1,2], [1.0,2.0]) ===> 1
  4297.  
  4298.  SEE ALSO
  4299.   typeof, _eqs, __get_reference, __is_callable
  4300.  
  4301.  NOTES
  4302.    For testing sameness, use `__is_same'.
  4303.  
  4304. --------------------------------------------------------------
  4305.  
  4306. getenv
  4307.  
  4308.  SYNOPSIS
  4309.   Get the value of an environment variable
  4310.  
  4311.  USAGE
  4312.   String_Type getenv(String_Type var)
  4313.  
  4314.  DESCRIPTION
  4315.    The `getenv' function returns a string that represents the
  4316.    value of an environment variable `var'.  It will return
  4317.    NULL if there is no environment variable whose name is given
  4318.    by `var'.
  4319.  
  4320.  EXAMPLE
  4321.  
  4322.     if (NULL != getenv ("USE_COLOR"))
  4323.       {
  4324.         set_color ("normal", "white", "blue");
  4325.         set_color ("status", "black", "gray");
  4326.         USE_ANSI_COLORS = 1;
  4327.       }
  4328.  
  4329.  
  4330.  SEE ALSO
  4331.   putenv, strlen, is_defined
  4332.  
  4333. --------------------------------------------------------------
  4334.  
  4335. __get_reference
  4336.  
  4337.  SYNOPSIS
  4338.   Get a reference to a global object
  4339.  
  4340.  USAGE
  4341.   Ref_Type __get_reference (String_Type nm)
  4342.  
  4343.  DESCRIPTION
  4344.   This function returns a reference to a global variable or function
  4345.   whose name is specified by `nm'.  If no such object exists, it
  4346.   returns NULL, otherwise it returns a reference.
  4347.  
  4348.  EXAMPLE
  4349.    Consider the function:
  4350.  
  4351.     define runhooks (hook)
  4352.     {
  4353.        variable f;
  4354.        f = __get_reference (hook);
  4355.        if (f != NULL)
  4356.          @f ();
  4357.     }
  4358.  
  4359.    This function could be called from another S-Lang function to allow
  4360.    customization of that function, e.g., if the function represents a
  4361.    jed editor mode, the hook could be called to setup keybindings for
  4362.    the mode.
  4363.  
  4364.  SEE ALSO
  4365.   is_defined, typeof, eval, autoload, __is_initialized, __uninitialize
  4366.  
  4367. --------------------------------------------------------------
  4368.  
  4369. implements
  4370.  
  4371.  SYNOPSIS
  4372.   Create a new static namespace
  4373.  
  4374.  USAGE
  4375.   implements (String_Type name)
  4376.  
  4377.  DESCRIPTION
  4378.   The `implements' function may be used to create a new static
  4379.   namespace and have it associated with the current compilation unit.
  4380.   If a namespace with the specified name already exists, a
  4381.   `NamespaceError' exception will be thrown.
  4382.  
  4383.   In addition to creating a new static namespace and associating it
  4384.   with the compilation unit, the function will also create a new
  4385.   private namespace.  As a result, any symbols in the previous private
  4386.   namespace will be no longer be accessable.  For this reason, it is
  4387.   recommended that this function should be used before any private
  4388.   symbols have been created.
  4389.  
  4390.  EXAMPLE
  4391.   Suppose that some file `t.sl' contains:
  4392.  
  4393.      implements ("My");
  4394.      define message (x)
  4395.      {
  4396.         Global->message ("My's message: $x"$);
  4397.      }
  4398.      message ("hello");
  4399.  
  4400.   will produce `"My's message: hello"'.  This `message'
  4401.   function may be accessed from outside the namespace via:
  4402.  
  4403.     My->message ("hi");
  4404.  
  4405.  
  4406.  NOTES
  4407.   Since `message' is an intrinsic function, it is public and may
  4408.   not be redefined in the public namespace.
  4409.  
  4410.   The `implements' function should rarely be used.  It is
  4411.   preferable to allow a static namespace to be associated with a
  4412.   compilation unit using, e.g., `evalfile'.
  4413.  
  4414.  SEE ALSO
  4415.   use_namespace, current_namespace, import
  4416.  
  4417. --------------------------------------------------------------
  4418.  
  4419. __is_callable
  4420.  
  4421.  SYNOPSIS
  4422.   Determine whether or not an object is callable
  4423.  
  4424.  USAGE
  4425.   Int_Type __is_callable (obj)
  4426.  
  4427.  DESCRIPTION
  4428.   This function may be used to determine if an object is callable by
  4429.   dereferencing the object.  It returns 1 if the argument is callable,
  4430.   or zero otherwise.
  4431.  
  4432.  EXAMPLE
  4433.    __is_callable (7)      ==> 0
  4434.    __is_callable (&sin)   ==> 1
  4435.    a = [&sin];
  4436.    __is_callable (a[0])   ==> 1
  4437.    __is_callable (&a[0])  ==> 0
  4438.  
  4439.  SEE ALSO
  4440.   __is_numeric, is_defined
  4441.  
  4442. --------------------------------------------------------------
  4443.  
  4444. __is_numeric
  4445.  
  4446.  SYNOPSIS
  4447.   Determine whether or not an object is a numeric type
  4448.  
  4449.  USAGE
  4450.   Int_Type __is_numeric (obj)
  4451.  
  4452.  DESCRIPTION
  4453.   This function may be used to determine if an object represents a
  4454.   numeric type.  It returns 0 if the argument is non-numeric, 1 if it
  4455.   is an integer, 2 if a floating point number, and 3 if it is complex.
  4456.   If the argument is an array, then the array type will be used for
  4457.   the test.
  4458.  
  4459.  EXAMPLE
  4460.    __is_numeric ("foo");  ==> 0
  4461.    __is_numeric ("0");    ==> 0
  4462.    __is_numeric (0);      ==> 1
  4463.    __is_numeric (PI);     ==> 2
  4464.    __is_numeric (2j);     ==> 3
  4465.    __is_numeric ([1,2]);  ==> 1
  4466.    __is_numeric ({1,2});  ==> 0
  4467.  
  4468.  SEE ALSO
  4469.   typeof, __is_datatype_numeric
  4470.  
  4471. --------------------------------------------------------------
  4472.  
  4473. __is_datatype_numeric
  4474.  
  4475.  SYNOPSIS
  4476.   Determine whether or not a type is a numeric type
  4477.  
  4478.  USAGE
  4479.   Int_Type __is_datatype_numeric (DataType_Type type)
  4480.  
  4481.  DESCRIPTION
  4482.   This function may be used to determine if the specified datatype
  4483.   represents a numeric type.  It returns 0 if the datatype does not
  4484.   represents a numeric type; otherwise it returns 1 for an
  4485.   integer type, 2 for a floating point type, and 3 for a complex type.
  4486.  
  4487.  SEE ALSO
  4488.   typeof, __is_numeric, __is_callable
  4489.  
  4490. --------------------------------------------------------------
  4491.  
  4492. __is_same
  4493.  
  4494.  SYNOPSIS
  4495.   Test for sameness of two objects
  4496.  
  4497.  USAGE
  4498.   Int_Type __is_same (a, b)
  4499.  
  4500.  DESCRIPTION
  4501.   This function tests its two arguments for sameness and returns 1
  4502.   if they are the same, or 0 otherwise.  To be the same, the data type of
  4503.   the arguments must match and the values of the objects must
  4504.   reference the same underlying object.
  4505.  
  4506.  EXAMPLE
  4507.    __is_same (1, 1)         ===> 1
  4508.    __is_same (1, 1.0)       ===> 0
  4509.    __is_same ("a", 1)       ===> 0
  4510.    __is_same ([1,2], [1,2]) ===> 0
  4511.  
  4512.  SEE ALSO
  4513.   typeof, _eqs, __get_reference, __is_callable
  4514.  
  4515.  NOTES
  4516.    For testing equality, use `_eqs'.
  4517.  
  4518. --------------------------------------------------------------
  4519.  
  4520. putenv
  4521.  
  4522.  SYNOPSIS
  4523.   Add or change an environment variable
  4524.  
  4525.  USAGE
  4526.   putenv (String_Type s)
  4527.  
  4528.  DESCRIPTION
  4529.     This functions adds string `s' to the environment.  Typically,
  4530.     `s' should of the form `"name=value"'.  The function
  4531.     throws an `OSError' upon failure.
  4532.  
  4533.  NOTES
  4534.     This function may not be available on all systems.
  4535.  
  4536.  SEE ALSO
  4537.   getenv, sprintf
  4538.  
  4539. --------------------------------------------------------------
  4540.  
  4541. _slang_install_prefix
  4542.  
  4543.  SYNOPSIS
  4544.   S-Lang's installation prefix
  4545.  
  4546.  USAGE
  4547.   String_Type _slang_install_prefix
  4548.  
  4549.  DESCRIPTION
  4550.   The value of this variable is set at the S-Lang library's
  4551.   compilation time.  On Unix systems, the value corresponds to the
  4552.   value of the `prefix' variable in the Makefile.  For normal
  4553.   installations, the library itself will be located in the `lib'
  4554.   subdirectory of the `prefix' directory.
  4555.  
  4556.  NOTES
  4557.   The value of this variable may or may not have anything to do with
  4558.   where the slang library is located.  As such, it should be regarded
  4559.   as a hint.  A standard installation will have the `slsh'
  4560.   library files located in the `share/slsh' subdirectory of the
  4561.   installation prefix.
  4562.  
  4563.  SEE ALSO
  4564.   _slang_doc_dir
  4565.  
  4566. --------------------------------------------------------------
  4567.  
  4568. _slang_utf8_ok
  4569.  
  4570.  SYNOPSIS
  4571.   Test if the interpreter running in UTF-8 mode
  4572.  
  4573.  USAGE
  4574.   Int_Type _slang_utf8_ok
  4575.  
  4576.  DESCRIPTION
  4577.   If the value of this variable is non-zero, then the interpreter is
  4578.   running in UTF-8 mode.  In this mode, characters in strings are
  4579.   interpreted as variable length byte sequences according to the
  4580.   semantics of the UTF-8 encoding.
  4581.  
  4582.  NOTES
  4583.   When running in UTF-8 mode, one must be careful not to confuse a
  4584.   character with a byte.  For example, in this mode the `strlen'
  4585.   function returns the number of characters in a string which may be
  4586.   different than the number of bytes.  The latter information may be
  4587.   obtained by the `strbytelen' function.
  4588.  
  4589.  SEE ALSO
  4590.   strbytelen, strlen, strcharlen
  4591.  
  4592. --------------------------------------------------------------
  4593.  
  4594. __uninitialize
  4595.  
  4596.  SYNOPSIS
  4597.   Uninitialize a variable
  4598.  
  4599.  USAGE
  4600.   __uninitialize (Ref_Type x)
  4601.  
  4602.  DESCRIPTION
  4603.   The `__uninitialize' function may be used to uninitialize the
  4604.   variable referenced by the parameter `x'.
  4605.  
  4606.  EXAMPLE
  4607.   The following two lines are equivalent:
  4608.  
  4609.      () = __tmp(z);
  4610.      __uninitialize (&z);
  4611.  
  4612.  
  4613.  SEE ALSO
  4614.   __tmp, __is_initialized
  4615.  
  4616. --------------------------------------------------------------
  4617.  
  4618. use_namespace
  4619.  
  4620.  SYNOPSIS
  4621.   Change to another namespace
  4622.  
  4623.  USAGE
  4624.   use_namespace (String_Type name)
  4625.  
  4626.  DESCRIPTION
  4627.    The `use_namespace' function changes the current static namespace to
  4628.    the one specified by the parameter.  If the specified namespace
  4629.    does not exist, a `NamespaceError' exception will be generated.
  4630.  
  4631.  SEE ALSO
  4632.   implements, current_namespace, import
  4633.  
  4634. --------------------------------------------------------------
  4635.  
  4636. path_basename
  4637.  
  4638.  SYNOPSIS
  4639.   Get the basename part of a filename
  4640.  
  4641.  USAGE
  4642.   String_Type path_basename (String_Type filename)
  4643.  
  4644.  DESCRIPTION
  4645.    The `path_basename' function returns the basename associated
  4646.    with the `filename' parameter.  The basename is the non-directory
  4647.    part of the filename, e.g., on unix `c' is the basename of
  4648.    `/a/b/c'.
  4649.  
  4650.  SEE ALSO
  4651.   path_dirname, path_extname, path_concat, path_is_absolute
  4652.  
  4653. --------------------------------------------------------------
  4654.  
  4655. path_basename_sans_extname
  4656.  
  4657.  SYNOPSIS
  4658.   Get the basename part of a filename but without the extension
  4659.  
  4660.  USAGE
  4661.   String_Type path_basename_sans_extname (String_Type path)
  4662.  
  4663.  DESCRIPTION
  4664.    The `path_basename_sans_extname' function returns the basename
  4665.    associated with the `filename' parameter, omitting the
  4666.    extension if present.  The basename is the non-directory part of
  4667.    the filename, e.g., on unix `c' is the basename of
  4668.    `/a/b/c'.
  4669.  
  4670.  SEE ALSO
  4671.   path_dirname, path_basename, path_extname, path_concat, path_is_absolute
  4672.  
  4673. --------------------------------------------------------------
  4674.  
  4675. path_concat
  4676.  
  4677.  SYNOPSIS
  4678.   Combine elements of a filename
  4679.  
  4680.  USAGE
  4681.   String_Type path_concat (String_Type dir, String_Type basename)
  4682.  
  4683.  DESCRIPTION
  4684.    The `path_concat' function combines the arguments `dir' and
  4685.    `basename' to produce a filename.  For example, on Unix if
  4686.    `dir' is `x/y' and `basename' is `z', then the
  4687.    function will return `x/y/z'.
  4688.  
  4689.  SEE ALSO
  4690.   path_dirname, path_basename, path_extname, path_is_absolute
  4691.  
  4692. --------------------------------------------------------------
  4693.  
  4694. path_dirname
  4695.  
  4696.  SYNOPSIS
  4697.   Get the directory name part of a filename
  4698.  
  4699.  USAGE
  4700.   String_Type path_dirname (String_Type filename)
  4701.  
  4702.  DESCRIPTION
  4703.    The `path_dirname' function returns the directory name
  4704.    associated with a specified filename.
  4705.  
  4706.  NOTES
  4707.    On systems that include a drive specifier as part of the filename,
  4708.    the value returned by this function will also include the drive
  4709.    specifier.
  4710.  
  4711.  SEE ALSO
  4712.   path_basename, path_extname, path_concat, path_is_absolute
  4713.  
  4714. --------------------------------------------------------------
  4715.  
  4716. path_extname
  4717.  
  4718.  SYNOPSIS
  4719.   Return the extension part of a filename
  4720.  
  4721.  USAGE
  4722.   String_Type path_extname (String_Type filename)
  4723.  
  4724.  DESCRIPTION
  4725.    The `path_extname' function returns the extension portion of the
  4726.    specified filename.  If an extension is present, this function will
  4727.    also include the dot as part of the extension, e.g., if `filename'
  4728.    is `"file.c"', then this function will return `".c"'.  If no
  4729.    extension is present, the function returns an empty string `""'.
  4730.  
  4731.  NOTES
  4732.    Under VMS, the file version number is not returned as part of the
  4733.    extension.
  4734.  
  4735.  SEE ALSO
  4736.   path_sans_extname, path_dirname, path_basename, path_concat, path_is_absolute
  4737.  
  4738. --------------------------------------------------------------
  4739.  
  4740. path_get_delimiter
  4741.  
  4742.  SYNOPSIS
  4743.   Get the value of a search-path delimiter
  4744.  
  4745.  USAGE
  4746.   Char_Type path_get_delimiter ()
  4747.  
  4748.  DESCRIPTION
  4749.   This function returns the value of the character used to delimit
  4750.   fields of a search-path.
  4751.  
  4752.  SEE ALSO
  4753.   set_slang_load_path, get_slang_load_path
  4754.  
  4755. --------------------------------------------------------------
  4756.  
  4757. path_is_absolute
  4758.  
  4759.  SYNOPSIS
  4760.   Determine whether or not a filename is absolute
  4761.  
  4762.  USAGE
  4763.   Int_Type path_is_absolute (String_Type filename)
  4764.  
  4765.  DESCRIPTION
  4766.    The `path_is_absolute' function will return non-zero is
  4767.    `filename' refers to an absolute filename, otherwise it returns zero.
  4768.  
  4769.  SEE ALSO
  4770.   path_dirname, path_basename, path_extname, path_concat
  4771.  
  4772. --------------------------------------------------------------
  4773.  
  4774. path_sans_extname
  4775.  
  4776.  SYNOPSIS
  4777.   Strip the extension from a filename
  4778.  
  4779.  USAGE
  4780.   String_Type path_sans_extname (String_Type filename)
  4781.  
  4782.  DESCRIPTION
  4783.   The `path_sans_extname' function removes the file name extension
  4784.   (including the dot) from the filename and returns the result.
  4785.  
  4786.  SEE ALSO
  4787.   path_basename_sans_extname, path_extname, path_basename, path_dirname, path_concat
  4788.  
  4789. --------------------------------------------------------------
  4790.  
  4791. close
  4792.  
  4793.  SYNOPSIS
  4794.   Close an open file descriptor
  4795.  
  4796.  USAGE
  4797.   Int_Type close (FD_Type fd)
  4798.  
  4799.  DESCRIPTION
  4800.   The `close' function is used to close and open file descriptor
  4801.   created by the `open' function.  Upon success 0 is returned,
  4802.   otherwise the function returns -1 and sets `errno' accordingly.
  4803.  
  4804.  SEE ALSO
  4805.   open, fclose, read, write
  4806.  
  4807. --------------------------------------------------------------
  4808.  
  4809. dup_fd
  4810.  
  4811.  SYNOPSIS
  4812.   Duplicate a file descriptor
  4813.  
  4814.  USAGE
  4815.   FD_Type dup_fd (FD_Type fd)
  4816.  
  4817.  DESCRIPTION
  4818.   The `dup_fd' function duplicates a specified file descriptor and
  4819.   returns the duplicate.  If the function fails, NULL will be
  4820.   returned and `errno' set accordingly.
  4821.  
  4822.  NOTES
  4823.   This function is essentially a wrapper around the POSIX `dup'
  4824.   function.
  4825.  
  4826.  SEE ALSO
  4827.   open, close
  4828.  
  4829. --------------------------------------------------------------
  4830.  
  4831. fileno
  4832.  
  4833.  SYNOPSIS
  4834.   Convert a stdio File_Type object to a FD_Type descriptor
  4835.  
  4836.  USAGE
  4837.   FD_Type fileno (File_Type fp)
  4838.  
  4839.  DESCRIPTION
  4840.   The `fileno' function returns the FD_Type descriptor
  4841.   associated with the stdio File_Type file pointer.  Upon failure,
  4842.   NULL is returned.
  4843.  
  4844.  SEE ALSO
  4845.   fopen, open, fclose, close, dup_fd
  4846.  
  4847. --------------------------------------------------------------
  4848.  
  4849. isatty
  4850.  
  4851.  SYNOPSIS
  4852.   Determine if an open file descriptor refers to a terminal
  4853.  
  4854.  USAGE
  4855.   Int_Type isatty (FD_Type or File_Type fd)
  4856.  
  4857.  DESCRIPTION
  4858.   This function returns 1 if the file descriptor `fd' refers to a
  4859.   terminal; otherwise it returns 0.  The object `fd' may either
  4860.   be a File_Type stdio descriptor or a lower-level FD_Type
  4861.   object.
  4862.  
  4863.  SEE ALSO
  4864.   fopen, fclose, fileno
  4865.  
  4866. --------------------------------------------------------------
  4867.  
  4868. lseek
  4869.  
  4870.  SYNOPSIS
  4871.   Reposition a file descriptor's file pointer
  4872.  
  4873.  USAGE
  4874.   Long_Type lseek (FD_Type fd, LLong_Type ofs, int mode)
  4875.    The `lseek' function repositions the file pointer associated
  4876.    with the open file descriptor `fd' to the offset `ofs'
  4877.    according to the mode parameter.  Specifically, `mode' must be
  4878.    one of the values:
  4879.  
  4880.      SEEK_SET   Set the offset to ofs from the beginning of the file
  4881.      SEEK_CUR   Add ofs to the current offset
  4882.      SEEK_END   Add ofs to the current file size
  4883.  
  4884.    Upon error, `lseek' returns -1 and sets `errno'.  If
  4885.    successful, it returns the new filepointer offset.
  4886.  
  4887.  NOTES
  4888.    Not all file descriptors are capable of supporting the seek
  4889.    operation, e.g., a descriptor associated with a pipe.
  4890.  
  4891.    By using SEEK_END with a positive value of the `ofs'
  4892.    parameter, it is possible to position the file pointer beyond the
  4893.    current size of the file.
  4894.  
  4895.  SEE ALSO
  4896.   fseek, ftell, open, close
  4897.  
  4898. --------------------------------------------------------------
  4899.  
  4900. open
  4901.  
  4902.  SYNOPSIS
  4903.   Open a file
  4904.  
  4905.  USAGE
  4906.   FD_Type open (String_Type filename, Int_Type flags [,Int_Type mode])
  4907.  
  4908.  DESCRIPTION
  4909.   The `open' function attempts to open a file specified by the
  4910.   `filename' parameter according to the `flags' parameter,
  4911.   which must be one of the following values:
  4912.  
  4913.      O_RDONLY   (read-only)
  4914.      O_WRONLY   (write-only)
  4915.      O_RDWR     (read/write)
  4916.  
  4917.   In addition, `flags' may also be bitwise-or'd with any of the
  4918.   following:
  4919.  
  4920.      O_BINARY   (open the file in binary mode)
  4921.      O_TEXT     (open the file in text mode)
  4922.      O_CREAT    (create the file if it does not exist)
  4923.      O_EXCL     (fail if the file already exists)
  4924.      O_NOCTTY   (do not make the device the controlling terminal)
  4925.      O_TRUNC    (truncate the file if it exists)
  4926.      O_APPEND   (open the file in append mode)
  4927.      O_NONBLOCK (open the file in non-blocking mode)
  4928.  
  4929.    Some of these flags make sense only when combined with other flags.
  4930.    For example, if O_EXCL is used, then O_CREAT must also be
  4931.    specified, otherwise unpredictable behavior may result.
  4932.  
  4933.    If O_CREAT is used for the `flags' parameter then the
  4934.    `mode' parameter must be present. `mode' specifies the
  4935.    permissions to use if a new file is created. The actual file
  4936.    permissions will be affected by the process's `umask' via
  4937.    `mode&~umask'.  The `mode' parameter's value is
  4938.    constructed via bitwise-or of the following values:
  4939.  
  4940.      S_IRWXU    (Owner has read/write/execute permission)
  4941.      S_IRUSR    (Owner has read permission)
  4942.      S_IWUSR    (Owner has write permission)
  4943.      S_IXUSR    (Owner has execute permission)
  4944.      S_IRWXG    (Group has read/write/execute permission)
  4945.      S_IRGRP    (Group has read permission)
  4946.      S_IWGRP    (Group has write permission)
  4947.      S_IXGRP    (Group has execute permission)
  4948.      S_IRWXO    (Others have read/write/execute permission)
  4949.      S_IROTH    (Others have read permission)
  4950.      S_IWOTH    (Others have write permission)
  4951.      S_IXOTH    (Others have execute permission)
  4952.  
  4953.    Upon success `open' returns a file descriptor object
  4954.    (FD_Type), otherwise NULL is returned and `errno'
  4955.    is set.
  4956.  
  4957.  NOTES
  4958.    If you are not familiar with the `open' system call, then it
  4959.    is recommended that you use `fopen' instead and use the higher
  4960.    level stdio interface.
  4961.  
  4962.  SEE ALSO
  4963.   fopen, close, read, write, stat_file
  4964.  
  4965. --------------------------------------------------------------
  4966.  
  4967. read
  4968.  
  4969.  SYNOPSIS
  4970.   Read from an open file descriptor
  4971.  
  4972.  USAGE
  4973.   UInt_Type read (FD_Type fd, Ref_Type buf, UInt_Type num)
  4974.  
  4975.  DESCRIPTION
  4976.   The `read' function attempts to read at most `num' bytes
  4977.   into the variable indicated by `buf' from the open file
  4978.   descriptor `fd'.  It returns the number of bytes read, or -1
  4979.   upon failure and sets `errno'.  The number of bytes
  4980.   read may be less than `num', and will be zero if an attempt is
  4981.   made to read past the end of the file.
  4982.  
  4983.  NOTES
  4984.   `read' is a low-level function and may return -1 for a variety
  4985.   of reasons.  For example, if non-blocking I/O has been specified for
  4986.   the open file descriptor and no data is available for reading then
  4987.   the function will return -1 and set `errno' to EAGAIN.
  4988.  
  4989.  SEE ALSO
  4990.   fread, open, close, write
  4991.  
  4992. --------------------------------------------------------------
  4993.  
  4994. write
  4995.  
  4996.  SYNOPSIS
  4997.   Write to an open file descriptor
  4998.  
  4999.  USAGE
  5000.   UInt_Type write (FD_Type fd, BString_Type buf)
  5001.  
  5002.  DESCRIPTION
  5003.    The `write' function attempts to write the bytes specified by
  5004.    the `buf' parameter to the open file descriptor `fd'.  It
  5005.    returns the number of bytes successfully written, or -1 and sets
  5006.    `errno' upon failure.  The number of bytes written may be less
  5007.    than `length(buf)'.
  5008.  
  5009.  SEE ALSO
  5010.   read, fwrite, open, close
  5011.  
  5012. --------------------------------------------------------------
  5013.  
  5014. getegid
  5015.  
  5016.  SYNOPSIS
  5017.   Get the effective group id of the current process
  5018.  
  5019.  USAGE
  5020.   Int_Type getegid ()
  5021.  
  5022.  DESCRIPTION
  5023.   The `getegid' function returns the effective group ID of the
  5024.   current process.
  5025.  
  5026.  NOTES
  5027.   This function is not supported by all systems.
  5028.  
  5029.  SEE ALSO
  5030.   getgid, geteuid, setgid
  5031.  
  5032. --------------------------------------------------------------
  5033.  
  5034. geteuid
  5035.  
  5036.  SYNOPSIS
  5037.   Get the effective user-id of the current process
  5038.  
  5039.  USAGE
  5040.   Int_Type geteuid ()
  5041.  
  5042.  DESCRIPTION
  5043.   The `geteuid' function returns the effective user-id of the
  5044.   current process.
  5045.  
  5046.  NOTES
  5047.   This function is not supported by all systems.
  5048.  
  5049.  SEE ALSO
  5050.   getuid, setuid, setgid
  5051.  
  5052. --------------------------------------------------------------
  5053.  
  5054. getgid
  5055.  
  5056.  SYNOPSIS
  5057.   Get the group id of the current process
  5058.  
  5059.  USAGE
  5060.   Integer_Type getgid ()
  5061.  
  5062.  DESCRIPTION
  5063.   The `getgid' function returns the real group id of the current
  5064.   process.
  5065.  
  5066.  NOTES
  5067.   This function is not supported by all systems.
  5068.  
  5069.  SEE ALSO
  5070.   getpid, getppid
  5071.  
  5072. --------------------------------------------------------------
  5073.  
  5074. getpid
  5075.  
  5076.  SYNOPSIS
  5077.   Get the current process id
  5078.  
  5079.  USAGE
  5080.   Integer_Type getpid ()
  5081.  
  5082.  DESCRIPTION
  5083.   The `getpid' function returns the current process identification
  5084.   number.
  5085.  
  5086.  SEE ALSO
  5087.   getppid, getgid
  5088.  
  5089. --------------------------------------------------------------
  5090.  
  5091. getppid
  5092.  
  5093.  SYNOPSIS
  5094.   Get the parent process id
  5095.  
  5096.  USAGE
  5097.   Integer_Type getppid ()
  5098.  
  5099.  DESCRIPTION
  5100.   The `getpid' function returns the process identification
  5101.   number of the parent process.
  5102.  
  5103.  NOTES
  5104.   This function is not supported by all systems.
  5105.  
  5106.  SEE ALSO
  5107.   getpid, getgid
  5108.  
  5109. --------------------------------------------------------------
  5110.  
  5111. getuid
  5112.  
  5113.  SYNOPSIS
  5114.   Get the user-id of the current process
  5115.  
  5116.  USAGE
  5117.   Int_Type getuid ()
  5118.  
  5119.  DESCRIPTION
  5120.   The `getuid' function returns the user-id of the current
  5121.   process.
  5122.  
  5123.  NOTES
  5124.   This function is not supported by all systems.
  5125.  
  5126.  SEE ALSO
  5127.   getuid, getegid
  5128.  
  5129. --------------------------------------------------------------
  5130.  
  5131. kill
  5132.  
  5133.  SYNOPSIS
  5134.   Send a signal to a process
  5135.  
  5136.  USAGE
  5137.   Integer_Type kill (Integer_Type pid, Integer_Type sig)
  5138.  
  5139.  DESCRIPTION
  5140.   This function may be used to send a signal given by the integer `sig'
  5141.   to the process specified by `pid'.  The function returns zero upon
  5142.   success or `-1' upon failure setting `errno' accordingly.
  5143.  
  5144.  EXAMPLE
  5145.   The `kill' function may be used to determine whether or not
  5146.   a specific process exists:
  5147.  
  5148.     define process_exists (pid)
  5149.     {
  5150.        if (-1 == kill (pid, 0))
  5151.          return 0;     % Process does not exist
  5152.        return 1;
  5153.     }
  5154.  
  5155.  
  5156.  NOTES
  5157.   This function is not supported by all systems.
  5158.  
  5159.  SEE ALSO
  5160.   getpid
  5161.  
  5162. --------------------------------------------------------------
  5163.  
  5164. mkfifo
  5165.  
  5166.  SYNOPSIS
  5167.   Create a named pipe
  5168.  
  5169.  USAGE
  5170.   Int_Type mkfifo (String_Type name, Int_Type mode)
  5171.  
  5172.  DESCRIPTION
  5173.   The `mkfifo' attempts to create a named pipe with the specified
  5174.   name and mode (modified by the process's umask).  The function
  5175.   returns 0 upon success, or -1 and sets `errno' upon failure.
  5176.  
  5177.  NOTES
  5178.   Not all systems support the `mkfifo' function and even on
  5179.   systems that do implement the `mkfifo' system call, the
  5180.   underlying file system may not support the concept of a named pipe,
  5181.   e.g, an NFS filesystem.
  5182.  
  5183.  SEE ALSO
  5184.   stat_file
  5185.  
  5186. --------------------------------------------------------------
  5187.  
  5188. setgid
  5189.  
  5190.  SYNOPSIS
  5191.   Set the group-id of the current process
  5192.  
  5193.  USAGE
  5194.   Int_Type setgid (Int_Type gid)
  5195.  
  5196.  DESCRIPTION
  5197.   The `setgid' function sets the effective group-id of the current
  5198.   process.  It returns zero upon success, or -1 upon error and sets
  5199.   `errno' appropriately.
  5200.  
  5201.  NOTES
  5202.   This function is not supported by all systems.
  5203.  
  5204.  SEE ALSO
  5205.   getgid, setuid
  5206.  
  5207. --------------------------------------------------------------
  5208.  
  5209. setpgid
  5210.  
  5211.  SYNOPSIS
  5212.   Set the process group-id
  5213.  
  5214.  USAGE
  5215.   Int_Type setpgid (Int_Type pid, Int_Type gid)
  5216.  
  5217.  DESCRIPTION
  5218.   The `setpgid' function sets the group-id `gid' of the
  5219.   process whose process-id is `pid'.  If `pid' is 0, then the
  5220.   current process-id will be used.  If `pgid' is 0, then the pid
  5221.   of the affected process will be used.
  5222.  
  5223.   If successful 0 will be returned, otherwise the function will
  5224.   return -1 and set `errno' accordingly.
  5225.  
  5226.  NOTES
  5227.   This function is not supported by all systems.
  5228.  
  5229.  SEE ALSO
  5230.   setgid, setuid
  5231.  
  5232. --------------------------------------------------------------
  5233.  
  5234. setuid
  5235.  
  5236.  SYNOPSIS
  5237.   Set the user-id of the current process
  5238.  
  5239.  USAGE
  5240.   Int_Type setuid (Int_Type id)
  5241.  
  5242.  DESCRIPTION
  5243.   The `setuid' function sets the effective user-id of the current
  5244.   process.  It returns zero upon success, or -1 upon error and sets
  5245.   `errno' appropriately.
  5246.  
  5247.  NOTES
  5248.   This function is not supported by all systems.
  5249.  
  5250.  SEE ALSO
  5251.   setgid, setpgid, getuid, geteuid
  5252.  
  5253. --------------------------------------------------------------
  5254.  
  5255. sleep
  5256.  
  5257.  SYNOPSIS
  5258.   Pause for a specified number of seconds
  5259.  
  5260.  USAGE
  5261.   sleep (Double_Type n)
  5262.  
  5263.  DESCRIPTION
  5264.   The `sleep' function delays the current process for the
  5265.   specified number of seconds.  If it is interrupted by a signal, it
  5266.   will return prematurely.
  5267.  
  5268.  NOTES
  5269.   Not all system support sleeping for a fractional part of a second.
  5270.  
  5271. --------------------------------------------------------------
  5272.  
  5273. system
  5274.  
  5275.  SYNOPSIS
  5276.   Execute a shell command
  5277.  
  5278.  USAGE
  5279.   Integer_Type system (String_Type cmd)
  5280.  
  5281.  DESCRIPTION
  5282.   The `system' function may be used to execute the string
  5283.   expression `cmd' in an inferior shell.  This function is an
  5284.   interface to the C `system' function which returns an
  5285.   implementation-defined result.   On Linux, it returns 127 if the
  5286.   inferior shell could not be invoked, -1 if there was some other
  5287.   error, otherwise it returns the return code for `cmd'.
  5288.  
  5289.  EXAMPLE
  5290.  
  5291.     define dir ()
  5292.     {
  5293.        () = system ("DIR");
  5294.     }
  5295.  
  5296.   displays a directory listing of the current directory under MSDOS or
  5297.   VMS.
  5298.  
  5299.  SEE ALSO
  5300.   popen, listdir
  5301.  
  5302. --------------------------------------------------------------
  5303.  
  5304. umask
  5305.  
  5306.  SYNOPSIS
  5307.   Set the file creation mask
  5308.  
  5309.  USAGE
  5310.   Int_Type umask (Int_Type m)
  5311.  
  5312.  DESCRIPTION
  5313.   The `umask' function sets the file creation mask to the value of
  5314.   `m' and returns the previous mask.
  5315.  
  5316.  SEE ALSO
  5317.   stat_file
  5318.  
  5319. --------------------------------------------------------------
  5320.  
  5321. uname
  5322.  
  5323.  SYNOPSIS
  5324.   Get the system name
  5325.  
  5326.  USAGE
  5327.   Struct_Type uname ()
  5328.  
  5329.  DESCRIPTION
  5330.   The `uname' function returns a structure containing information
  5331.   about the operating system.  The structure contains the following
  5332.   fields:
  5333.  
  5334.        sysname  (Name of the operating system)
  5335.        nodename (Name of the node within the network)
  5336.        release  (Release level of the OS)
  5337.        version  (Current version of the release)
  5338.        machine  (Name of the hardware)
  5339.  
  5340.  
  5341.  NOTES
  5342.   Not all systems support this function.
  5343.  
  5344.  SEE ALSO
  5345.   getenv
  5346.  
  5347. --------------------------------------------------------------
  5348.  
  5349. qualifier
  5350.  
  5351.  SYNOPSIS
  5352.   Get the value of a qualifier
  5353.  
  5354.  USAGE
  5355.   value = qualifier (String_Type name [,default_value])
  5356.  
  5357.  DESCRIPTION
  5358.  This function may be used to get the value of a qualifer.  If the
  5359.  specified qualifier does not exist, `NULL' will be returned,
  5360.  unless a default value has been provided.
  5361.  
  5362.  EXAMPLE
  5363.  
  5364.     define echo (text)
  5365.     {
  5366.        variable fp = qualifier ("out", stdout);
  5367.        () = fputs (text, fp);
  5368.     }
  5369.     echo ("hello");              % writes hello to stdout
  5370.     echo ("hello"; out=stderr);  % writes hello to stderr
  5371.  
  5372.  
  5373.  NOTES
  5374.  Since `NULL' is a valid value for a qualifier, this function is
  5375.  unable to distinguish between a non-existent qualifier and one whose
  5376.  value is `NULL'.  If such a distinction is important, the
  5377.  `qualifier_exists' function can be used.  For example,
  5378.  
  5379.     define echo (text)
  5380.     {
  5381.        variable fp = stdout;
  5382.        if (qualifier_exists ("use_stderr"))
  5383.          fp = stderr;
  5384.        () = fputs (text, fp);
  5385.     }
  5386.     echo ("hello"; use_stderr);  % writes hello to stderr
  5387.  
  5388.  In this case, no value was provided for the `use_stderr'
  5389.  qualifier: it exists but has a value of `NULL'.
  5390.  
  5391.  SEE ALSO
  5392.   qualifier_exists, __qualifiers
  5393.  
  5394. --------------------------------------------------------------
  5395.  
  5396. __qualifiers
  5397.  
  5398.  SYNOPSIS
  5399.   Get the active set of qualifiers
  5400.  
  5401.  USAGE
  5402.   Struct_Type __qualifiers ()
  5403.  
  5404.  DESCRIPTION
  5405.  This function returns the set of qualifiers associated with the
  5406.  current execution context.  If qualifiers are active, then the result
  5407.  is a structure representing the names of the qualifiers and their
  5408.  corresponding values.  Otherwise `NULL' will be returned.
  5409.  
  5410.  One of the main uses of this function is to pass the current set of
  5411.  qualifiers to another another function.  For example, consider a
  5412.  plotting application with a function called called `lineto' that
  5413.  sets the pen-color before drawing the line to the specified point:
  5414.  
  5415.     define lineto (x, y)
  5416.     {
  5417.        % The color may be specified by a qualifier, defaulting to black
  5418.        variable color = qualifier ("color", "black");
  5419.        set_pen_color (color);
  5420.            .
  5421.            .
  5422.     }
  5423.  
  5424.  The `lineto' function permits the color to be specified by a
  5425.  qualifier.  Now consider a function that make use of lineto to draw a
  5426.  line segment between two points:
  5427.  
  5428.     define line_segment (x0, y0, x1, y1)
  5429.     {
  5430.        moveto (x0, y0);
  5431.        lineto (x1, y1 ; color=qualifier("color", "black"));
  5432.     }
  5433.     line_segment (1,1, 10,10; color="blue");
  5434.  
  5435.  Note that in this implementation of `line_segment', the
  5436.  `color' qualifier was explicitely passed to the `lineto'
  5437.  function.  However, this technique does not scale well.  For example, the
  5438.  `lineto' function might also take a qualifer that specifies the
  5439.  line-style, to be used as
  5440.  
  5441.     line_segment (1,1, 10,10; color="blue", linestyle="solid");
  5442.  
  5443.  But the above implementation of `line_segment' does not pass the
  5444.  `linestyle' qualifier.  In such a case, it is preferable to pass
  5445.  all the qualifiers, e.g.,
  5446.  
  5447.     define line_segment (x0, y0, x1, y1)
  5448.     {
  5449.        moveto (x0, y0);
  5450.        lineto (x1, y1 ;; __qualifiers());
  5451.     }
  5452.  
  5453.  Note the use of the double-semi colon in the `lineto'
  5454.  statement.  This tells the parser that the qualifiers are specified
  5455.  by a structure-valued argument and not a set of name-value pairs.
  5456.  
  5457.  SEE ALSO
  5458.   qualifier, qualifier_exists
  5459.  
  5460. --------------------------------------------------------------
  5461.  
  5462. qualifier_exists
  5463.  
  5464.  SYNOPSIS
  5465.   Check for the existence of a qualifier
  5466.  
  5467.  USAGE
  5468.   Int_Type qualifier_exists (String_Type name)
  5469.  
  5470.  DESCRIPTION
  5471.  This function will return 1 if a qualifier of the specified name
  5472.  exists, or 0 otherwise.
  5473.  
  5474.  SEE ALSO
  5475.   qualifier, __qualifiers
  5476.  
  5477. --------------------------------------------------------------
  5478.  
  5479. rline_bolp
  5480.  
  5481.  SYNOPSIS
  5482.   Test of the editing point is at the beginning of the line
  5483.  
  5484.  USAGE
  5485.   Int_Type rline_bolp()
  5486.  
  5487.  DESCRIPTION
  5488.   The `rline_bolp' function returns a non-zero value if the
  5489.   current editing position is at the beginning of the line.
  5490.  
  5491.  EXAMPLE
  5492.  
  5493.  NOTES
  5494.  This function is part of the S-Lang readline interface.
  5495.  
  5496.  SEE ALSO
  5497.   rline_eolp, rline_get_point, rline_get_line
  5498.  
  5499. --------------------------------------------------------------
  5500.  
  5501. rline_eolp
  5502.  
  5503.  SYNOPSIS
  5504.   Test of the editing point is at the end of the line
  5505.  
  5506.  USAGE
  5507.   Int_Type rline_eolp()
  5508.  
  5509.  DESCRIPTION
  5510.   The `rline_bolp' function returns a non-zero value if the
  5511.   current editing position is at the end of the line.
  5512.  
  5513.  EXAMPLE
  5514.  
  5515.  NOTES
  5516.  This function is part of the S-Lang readline interface.
  5517.  
  5518.  SEE ALSO
  5519.   rline_bolp, rline_get_point, rline_get_line
  5520.  
  5521. --------------------------------------------------------------
  5522.  
  5523. rline_call
  5524.  
  5525.  SYNOPSIS
  5526.   Invoke an internal readline function
  5527.  
  5528.  USAGE
  5529.   rline_call (String_Type func)
  5530.  
  5531.  DESCRIPTION
  5532.  Not all of the readline functions are available directly from the
  5533.  S-Lang interpreter.  For example, the "deleol" function, which
  5534.  deletes through the end of the line may be executed using
  5535.  
  5536.     rline_call("deleol");
  5537.  
  5538.   See the documentation for the `rline_setkey' function for a
  5539.   list of internal functions that may be invoked by `rline_call'.
  5540.  
  5541.  EXAMPLE
  5542.  
  5543.  NOTES
  5544.  This function is part of the S-Lang readline interface.
  5545.  
  5546.  SEE ALSO
  5547.   rline_setkey, rline_del, rline_ins
  5548.  
  5549. --------------------------------------------------------------
  5550.  
  5551. rline_del
  5552.  
  5553.  SYNOPSIS
  5554.   Delete a specified number of characters at the current position
  5555.  
  5556.  USAGE
  5557.   rline_del(Int_Type n)
  5558.  
  5559.  DESCRIPTION
  5560.  This function delete a specified number of characters at the current
  5561.  editing position.  If the number `n' is less than zero, then the
  5562.  previous `n' characters will be deleted.  Otherwise, the next
  5563.  `n' characters will be deleted.
  5564.  
  5565.  EXAMPLE
  5566.  
  5567.  NOTES
  5568.  This function is part of the S-Lang readline interface.
  5569.  
  5570.  SEE ALSO
  5571.   rline_ins, rline_setkey
  5572.  
  5573. --------------------------------------------------------------
  5574.  
  5575. rline_get_edit_width
  5576.  
  5577.  SYNOPSIS
  5578.   Get the width of the readline edit window
  5579.  
  5580.  USAGE
  5581.   Int_Type rline_get_edit_width ()
  5582.  
  5583.  DESCRIPTION
  5584.   This function returns the width of the edit window.  For `slsh', this
  5585.   number corresponds to the width of the terminal window.
  5586.  
  5587.  EXAMPLE
  5588.  
  5589.  NOTES
  5590.  This function is part of the S-Lang readline interface.
  5591.  
  5592.  SEE ALSO
  5593.   rline_ins
  5594.  
  5595. --------------------------------------------------------------
  5596.  
  5597. rline_get_history
  5598.  
  5599.  SYNOPSIS
  5600.   Retrieve the readline history
  5601.  
  5602.  USAGE
  5603.   Array_Type rline_get_history ()
  5604.  
  5605.  DESCRIPTION
  5606.   This function returns the readline edit history as an array of
  5607.   strings.
  5608.  
  5609.  EXAMPLE
  5610.  
  5611.  NOTES
  5612.  This function is part of the S-Lang readline interface.
  5613.  
  5614.  SEE ALSO
  5615.   rline_set_line
  5616.  
  5617. --------------------------------------------------------------
  5618.  
  5619. rline_get_line
  5620.  
  5621.  SYNOPSIS
  5622.   Get a copy of the line being edited
  5623.  
  5624.  USAGE
  5625.   String_Type rline_get_line ()
  5626.  
  5627.  DESCRIPTION
  5628.   This function returns the current edit line.
  5629.  
  5630.  EXAMPLE
  5631.  
  5632.  NOTES
  5633.  This function is part of the S-Lang readline interface.
  5634.  
  5635.  SEE ALSO
  5636.   rline_set_line, rline_get_history
  5637.  
  5638. --------------------------------------------------------------
  5639.  
  5640. rline_get_point
  5641.  
  5642.  SYNOPSIS
  5643.   Get the current editing position
  5644.  
  5645.  USAGE
  5646.   Int_Type rline_get_point ()
  5647.  
  5648.  DESCRIPTION
  5649.  The `rline_get_point' function returns the byte-offset of the
  5650.  current editing position.
  5651.  
  5652.  EXAMPLE
  5653.  
  5654.  NOTES
  5655.  This function is part of the S-Lang readline interface.
  5656.  
  5657.  SEE ALSO
  5658.   rline_set_point
  5659.  
  5660. --------------------------------------------------------------
  5661.  
  5662. rline_getkey
  5663.  
  5664.  SYNOPSIS
  5665.   Obtain the next byte in the readline input stream
  5666.  
  5667.  USAGE
  5668.   Int_Type rline_getkey ()
  5669.   This function returns the next byte in the readline input stream.
  5670.   If no byte is available, the function will wait until one is.
  5671.  
  5672.  DESCRIPTION
  5673.  
  5674.  EXAMPLE
  5675.  
  5676.  NOTES
  5677.  This function is part of the S-Lang readline interface.
  5678.  
  5679.  SEE ALSO
  5680.   rline_input_pending, rline_setkey
  5681.  
  5682. --------------------------------------------------------------
  5683.  
  5684. rline_input_pending
  5685.  
  5686.  SYNOPSIS
  5687.   Test to see if readline input is available for reading
  5688.  
  5689.  USAGE
  5690.   Int_Type rline_input_pending (Int_Type tsecs)
  5691.  
  5692.  DESCRIPTION
  5693.   This function returns a non-zero value if readline input is
  5694.   available to be read.  If none is immediately available, it will
  5695.   wait for up to `tsecs' tenths of a second for input before
  5696.   returning.
  5697.  
  5698.  EXAMPLE
  5699.  
  5700.  NOTES
  5701.  This function is part of the S-Lang readline interface.
  5702.  
  5703.  SEE ALSO
  5704.   rline_getkey
  5705.  
  5706. --------------------------------------------------------------
  5707.  
  5708. rline_ins
  5709.  
  5710.  SYNOPSIS
  5711.   Insert a string at the current editing point
  5712.  
  5713.  USAGE
  5714.   rline_ins (String_Type text)
  5715.  
  5716.  DESCRIPTION
  5717.   This function inserts the specified string into the line being edited.
  5718.  
  5719.  EXAMPLE
  5720.  
  5721.  NOTES
  5722.  This function is part of the S-Lang readline interface.
  5723.  
  5724.  SEE ALSO
  5725.   rline_set_line, rline_del
  5726.  
  5727. --------------------------------------------------------------
  5728.  
  5729. rline_set_history
  5730.  
  5731.  SYNOPSIS
  5732.   Replace the current history list with a new one
  5733.  
  5734.  USAGE
  5735.   rline_set_history (Array_Type lines)
  5736.  
  5737.  DESCRIPTION
  5738.   The `rline_set_history' function replaces the current history
  5739.   by the specified array of strings.
  5740.  
  5741.  EXAMPLE
  5742.  
  5743.  NOTES
  5744.  This function is part of the S-Lang readline interface.
  5745.  
  5746.  SEE ALSO
  5747.   rline_get_history
  5748.  
  5749. --------------------------------------------------------------
  5750.  
  5751. rline_set_line
  5752.  
  5753.  SYNOPSIS
  5754.   Replace the current line with a new one
  5755.  
  5756.  USAGE
  5757.   rline_set_line (String_Type line)
  5758.  
  5759.  DESCRIPTION
  5760.   The `rline_set_line' function replaces the line being edited by
  5761.   the specified one.
  5762.  
  5763.  EXAMPLE
  5764.  
  5765.  NOTES
  5766.  This function is part of the S-Lang readline interface.
  5767.  
  5768.  SEE ALSO
  5769.   rline_get_line
  5770.  
  5771. --------------------------------------------------------------
  5772.  
  5773. rline_set_point
  5774.  
  5775.  SYNOPSIS
  5776.   Move the current editing position to another
  5777.  
  5778.  USAGE
  5779.   rline_set_point (Int_Type ofs)
  5780.  
  5781.  DESCRIPTION
  5782.  The `rline_set_point' function sets the editing point to the
  5783.  specified byte-offset from the beginning of the line.
  5784.  
  5785.  EXAMPLE
  5786.  
  5787.  NOTES
  5788.  This function is part of the S-Lang readline interface.
  5789.  
  5790.  SEE ALSO
  5791.   rline_get_point
  5792.  
  5793. --------------------------------------------------------------
  5794.  
  5795. rline_setkey
  5796.  
  5797.  SYNOPSIS
  5798.   Bind a key in the readline keymap to a function
  5799.  
  5800.  USAGE
  5801.   rline_setkey (func, keyseq)
  5802.  
  5803.  DESCRIPTION
  5804.   The `rline_setkey' function binds the function `func' to
  5805.   the specified key sequence `keyseq'.  The value of `func'
  5806.   may be either a reference to a S-Lang function, or a string giving
  5807.   the name of an internal readline function.
  5808.  
  5809.   Functions that are internal to the readline interface include:
  5810.  
  5811.    bdel             Delete the previous character
  5812.    bol              Move to the beginning of the line
  5813.    complete         The command line completion function
  5814.    del              Delete the character at the current position
  5815.    delbol           Delete to the beginning of the line
  5816.    deleol           Delete through the end of the line
  5817.    down             Goto the next line in the history
  5818.    enter            Return to the caller of the readline function
  5819.    eol              Move to the end of the line
  5820.    kbd_quit         Abort editing of the current line
  5821.    left             Move left one character
  5822.    quoted_insert    Insert the next byte into the line
  5823.    redraw           Redraw the line
  5824.    right            Move right one character
  5825.    self_insert      Insert the byte that invoked the function
  5826.    trim             Remove whitespace about the current position
  5827.    up               Goto the previous line in the history
  5828.  
  5829.  
  5830.  NOTES
  5831.  This function is part of the S-Lang readline interface.
  5832.  
  5833.  SEE ALSO
  5834.   rline_unsetkey
  5835.  
  5836. --------------------------------------------------------------
  5837.  
  5838. rline_unsetkey
  5839.  
  5840.  SYNOPSIS
  5841.   Unset a key binding from the readline keymap
  5842.  
  5843.  USAGE
  5844.   rline_unsetkey (String_Type keyseq)
  5845.  
  5846.  DESCRIPTION
  5847.   The `rline_unsetkey' function unbinds the specified key sequence
  5848.   from the readline keymap.
  5849.  
  5850.  EXAMPLE
  5851.  
  5852.  NOTES
  5853.  This function is part of the S-Lang readline interface.
  5854.  
  5855.  SEE ALSO
  5856.   rline_setkey
  5857.  
  5858. --------------------------------------------------------------
  5859.  
  5860. rline_set_list_completions_callback
  5861.  
  5862.  SYNOPSIS
  5863.   Set a callback function to display the list of completions
  5864.  
  5865.  USAGE
  5866.   rline_set_list_completions_callback (Ref_Type func)
  5867.  
  5868.  DESCRIPTION
  5869.   This function sets the S-Lang function that is to be used to display the
  5870.   list of possible completions for current word at the readline prompt.
  5871.   The callback function must be defined to accept a single parameter
  5872.   representing an array of completion strings.
  5873.  
  5874.  EXAMPLE
  5875.   This callback function writes the completions using the message
  5876.   functions:
  5877.  
  5878.      private define display_completions (strings)
  5879.      {
  5880.         variable str;
  5881.         vmessage ("There are %d completions:\n", length(strings));
  5882.         foreach str (strings) vmessage ("%s\n", str);
  5883.      }
  5884.      rline_set_list_completions_callback (&display_completions);
  5885.  
  5886.  
  5887.  NOTES
  5888.  
  5889.  SEE ALSO
  5890.   rline_set_completion_callback
  5891.  
  5892. --------------------------------------------------------------
  5893.  
  5894. rline_set_completion_callback
  5895.  
  5896.  SYNOPSIS
  5897.   Set the function to be used for completion at the readline prompt
  5898.  
  5899.  USAGE
  5900.   rline_set_completion_callback (Ref_Type func)
  5901.  
  5902.  DESCRIPTION
  5903.   This function sets the callback function to be used for completion at the
  5904.   readline prompt.  The callback function must be defined to accept
  5905.   two values, the first being a string containing the text of the line
  5906.   being edited, and an integer giving the position of the byte-offset
  5907.   into the string where completion was requested.
  5908.  
  5909.   The callback function must return two values: an array giving the
  5910.   list of possible completion strings, and an integer giving the byte
  5911.   offset into the string of the start of the text to be completed.
  5912.  
  5913.  EXAMPLE
  5914.   See completion-callback function defined in the `slsh' library file
  5915.   `rline/complete.sl'.
  5916.  
  5917.  NOTES
  5918.  This function is part of the S-Lang readline interface.
  5919.  
  5920.  SEE ALSO
  5921.   rline_set_list_completions_callback
  5922.  
  5923. --------------------------------------------------------------
  5924.  
  5925. alarm
  5926.  
  5927.  SYNOPSIS
  5928.   Schedule an alarm signal
  5929.  
  5930.  USAGE
  5931.   alarm (UInt_Type secs [, Ref_Type secs_remaining])
  5932.  
  5933.  DESCRIPTION
  5934.   The `alarm' function schedules the delivery of a SIGALRM
  5935.   signal in `secs' seconds.  Any previously scheduled alarm will
  5936.   be canceled.  If `secs' is zero, then no new alarm will be
  5937.   scheduled.  If the second argument is present, then it must be a
  5938.   reference to a variable whose value will be set upon return to the
  5939.   number of seconds remaining for a previously scheduled alarm to take
  5940.   place.
  5941.  
  5942.  EXAMPLE
  5943.   This example shows demonstrates how the `alarm' function may be
  5944.   used to read from a file within a specified amount of time:
  5945.  
  5946.     define sigalrm_handler (sig)
  5947.     {
  5948.        throw ReadError, "Read timed out";
  5949.     }
  5950.     define read_or_timeout (secs)
  5951.     {
  5952.        variable line, e;
  5953.        variable fp = fopen ("/dev/tty", "r");
  5954.        signal (SIGALRM, &sigalrm_handler);
  5955.        alarm (secs);
  5956.        try (e)
  5957.          {
  5958.             () = fputs ("Enter some text> ", stdout); () = fflush (stdout);
  5959.             if (-1 == fgets (&line, fp))
  5960.               line = NULL;
  5961.          }
  5962.        catch IOError: { message (e.message); line = NULL; }
  5963.        return line;
  5964.     }
  5965.  
  5966.  
  5967.  NOTES
  5968.   Some operating systems may implement the `sleep' function using
  5969.   `alarm'.  As a result, it is not a good idea to mix calls to
  5970.   `alarm' and `sleep'.
  5971.  
  5972.   The default action for SIGALRM is to terminate the process.
  5973.   Hence, if `alarm' is called it is wise to establish a signal
  5974.   handler for `SIGALRM'.
  5975.  
  5976.  SEE ALSO
  5977.   signal, sleep
  5978.  
  5979. --------------------------------------------------------------
  5980.  
  5981. signal
  5982.  
  5983.  SYNOPSIS
  5984.   Establish a signal handler
  5985.  
  5986.  USAGE
  5987.   signal (Int_Type sig, Ref_Type func [,Ref_Type old_func])
  5988.  
  5989.  DESCRIPTION
  5990.   The `signal' function assigns the signal handler represented by
  5991.   `func' to the signal `sig'.  Here `func' is usually
  5992.   reference to a function that takes an integer argument (the signal)
  5993.   and returns nothing, e.g.,
  5994.  
  5995.     define signal_handler (sig)
  5996.     {
  5997.        return;
  5998.     }
  5999.  
  6000.   Alternatively, `func' may be given by one of the symbolic
  6001.   constants SIG_IGN or SIG_DFL to indicate that the
  6002.   signal is to be ignored or given its default action, respectively.
  6003.  
  6004.   The first parameter, `sig', specifies the signal to be handled.
  6005.   The actual supported values vary with the OS.  Common values on Unix
  6006.   include `SIGHUP', `SIGINT', and `SIGTERM'.
  6007.  
  6008.   If a third argument is present, then it must be a reference to a
  6009.   variable whose value will be set to the value of the previously
  6010.   installed handler.
  6011.  
  6012.  EXAMPLE
  6013.   This example establishes a handler for `SIGTSTP'.
  6014.  
  6015.     static define sig_suspend ();  % forward declaration
  6016.     static define sig_suspend (sig)
  6017.     {
  6018.        message ("SIGTSTP received-- stopping");
  6019.        signal (sig, SIG_DFL);
  6020.        () = kill (getpid(), SIGSTOP);
  6021.        message ("Resuming");
  6022.        signal (sig, &sig_suspend);
  6023.     }
  6024.     signal (SIGTSTP, &sig_suspend);
  6025.  
  6026.  
  6027.  NOTES
  6028.   Currently the signal interface is supported only on systems that
  6029.   implement signals according to the POSIX standard.
  6030.  
  6031.   Once a signal has been received, it will remain blocked until after
  6032.   the signal handler has completed.  This is the reason SIGSTOP
  6033.   was used in the above signal handler instead of SIGTSTP.
  6034.  
  6035.  SEE ALSO
  6036.   alarm, sigsuspend, sigprocmask
  6037.  
  6038. --------------------------------------------------------------
  6039.  
  6040. sigprocmask
  6041.  
  6042.  SYNOPSIS
  6043.   Change the list of currently blocked signals
  6044.  
  6045.  USAGE
  6046.   sigprocmask (Int_Type how, Array_Type mask [,Ref_Type old_mask])
  6047.  
  6048.  DESCRIPTION
  6049.   The `sigprocmask' function may be used to change the list of
  6050.   signals that are currently blocked.  The first parameter indicates
  6051.   how this is accomplished.  Specifically, `how' must be one of
  6052.   the following values: SIG_BLOCK, SIG_UNBLOCK, or
  6053.   SIG_SETMASK.
  6054.  
  6055.   If `how' is SIG_BLOCK, then the set of blocked signals
  6056.   will be the union the current set with the values specified in the
  6057.   `mask' argument.
  6058.  
  6059.   If `how' is SIG_UNBLOCK, then the signals specified by
  6060.   the `mask' parameter will be removed from the currently blocked
  6061.   set.
  6062.  
  6063.   If `how' is SIG_SETMASK, then the set of blocked signals
  6064.   will be set to those given by the `mask'.
  6065.  
  6066.   If a third argument is present, then it must be a reference to a
  6067.   variable whose value will be set to the previous signal mask.
  6068.  
  6069.  SEE ALSO
  6070.   signal, sigsuspend, alarm
  6071.  
  6072. --------------------------------------------------------------
  6073.  
  6074. sigsuspend
  6075.  
  6076.  SYNOPSIS
  6077.   Suspend the process until a signal is delivered
  6078.  
  6079.  USAGE
  6080.   sigsuspend ([Array_Type signal_mask])
  6081.  
  6082.  DESCRIPTION
  6083.   The
  6084. sigsuspend
  6085.  function suspends the current process
  6086.   until a signal is received.  An optional array argument may be
  6087.   passed to the function to specify a list of signals that should be
  6088.   temporarily blocked while waiting for a signal.
  6089.  
  6090.  EXAMPLE
  6091.   The following example pauses the current process for 10 seconds
  6092.   while blocking the SIGHUP and SIGINT signals.
  6093.  
  6094.      static variable Tripped;
  6095.      define sigalrm_handler (sig)
  6096.      {
  6097.         Tripped = 1;
  6098.      }
  6099.      signal (SIGALRM, &sigalrm_handler);
  6100.      Tripped = 0;
  6101.      alarm (10);
  6102.      while (Tripped == 0) sigsuspend ([SIGHUP, SIGINT]);
  6103.  
  6104.   Note that in this example the call to `sigsuspend' was wrapped in
  6105.   a while-loop.  This was necessary because there is no guarantee that
  6106.   another signal would not cause `sigsuspend' to return.
  6107.  
  6108.  SEE ALSO
  6109.   signal, alarm, sigprocmask
  6110.  
  6111. --------------------------------------------------------------
  6112.  
  6113. dup
  6114.  
  6115.  SYNOPSIS
  6116.   Duplicate the value at the top of the stack
  6117.  
  6118.  USAGE
  6119.   dup ()
  6120.  
  6121.  DESCRIPTION
  6122.   This function returns an exact duplicate of the object on top of the
  6123.   stack.  For some objects such as arrays or structures, it creates a
  6124.   new reference to the object.  However, for simple scalar S-Lang types such
  6125.   as strings, integers, and doubles, it creates a new copy of the
  6126.   object.
  6127.  
  6128.  SEE ALSO
  6129.   pop, typeof
  6130.  
  6131. --------------------------------------------------------------
  6132.  
  6133. exch
  6134.  
  6135.  SYNOPSIS
  6136.   Exchange two items on the stack
  6137.  
  6138.  USAGE
  6139.   exch ()
  6140.  
  6141.  DESCRIPTION
  6142.   The `exch' swaps the two top items on the stack.
  6143.  
  6144.  SEE ALSO
  6145.   pop, _stk_reverse, _stk_roll
  6146.  
  6147. --------------------------------------------------------------
  6148.  
  6149. pop
  6150.  
  6151.  SYNOPSIS
  6152.   Discard an item from the stack
  6153.  
  6154.  USAGE
  6155.   pop ()
  6156.  
  6157.  DESCRIPTION
  6158.   The `pop' function removes the top item from the stack.
  6159.  
  6160.  SEE ALSO
  6161.   _pop_n, __pop_args
  6162.  
  6163. --------------------------------------------------------------
  6164.  
  6165. __pop_args
  6166.  
  6167.  SYNOPSIS
  6168.   Remove n function arguments from the stack
  6169.  
  6170.  USAGE
  6171.   args = __pop_args(Integer_Type n)
  6172.  
  6173.  DESCRIPTION
  6174.   This function, together with the companion function
  6175.   `__push_args', is useful for creating a function that takes a
  6176.   variable number of arguments, as well as passing the arguments of
  6177.   one function to another function.
  6178.  
  6179.   `__pop_args' removes the specified number of values from the
  6180.   stack and returns them as an array of structures of the corresponding
  6181.   length.  Each structure in the array consists of a single
  6182.   field called `value', which represents the value of the
  6183.   argument.
  6184.  
  6185.  EXAMPLE
  6186.   Consider the following function.  It prints all its arguments to
  6187.   `stdout' separated by spaces:
  6188.  
  6189.     define print_args ()
  6190.     {
  6191.        variable i;
  6192.        variable args = __pop_args (_NARGS);
  6193.  
  6194.        for (i = 0; i < _NARGS; i++)
  6195.          {
  6196.             () = fputs (string (args[i].value), stdout);
  6197.             () = fputs (" ", stdout);
  6198.          }
  6199.        () = fputs ("\n", stdout);
  6200.        () = fflush (stdout);
  6201.     }
  6202.  
  6203.   Now consider the problem of defining a function called `ones'
  6204.   that returns a multi-dimensional array with all the elements set to
  6205.   1.  For example, `ones(10)' should return a 1-d array of 10
  6206.   ones, whereas `ones(10,20)' should return a 10x20 array.
  6207.  
  6208.     define ones ()
  6209.     {
  6210.       !if (_NARGS) return 1;
  6211.       variable a;
  6212.  
  6213.       a = __pop_args (_NARGS);
  6214.       return @Array_Type (Integer_Type, [__push_args (a)]) + 1;
  6215.     }
  6216.  
  6217.   Here, `__push_args' was used to push the arguments passed to
  6218.   the `ones' function onto the stack to be used when dereferencing
  6219.   Array_Type.
  6220.  
  6221.  NOTES
  6222.   This function has been superseded by the `__pop_list' function,
  6223.   which returns the objects as a list instead of an array of structures.
  6224.  
  6225.  SEE ALSO
  6226.   __push_args, __pop_list, __push_list, typeof, _pop_n
  6227.  
  6228. --------------------------------------------------------------
  6229.  
  6230. __pop_list
  6231.  
  6232.  SYNOPSIS
  6233.   Convert items on the stack to a List_Type
  6234.  
  6235.  USAGE
  6236.   List_Type = __pop_list (Int_Type n)
  6237.  
  6238.  DESCRIPTION
  6239.  This function removes a specified number of items from the stack and
  6240.  converts returns them in the form of a list.
  6241.  
  6242.  EXAMPLE
  6243.  
  6244.   define print_args ()
  6245.   {
  6246.      variable list = __pop_list (_NARGS);
  6247.      variable i;
  6248.      _for i (0, length(list)-1, 1)
  6249.         {
  6250.            vmessage ("arg[%d]: %S", i, list[i]);
  6251.         }
  6252.   }
  6253.  
  6254.  
  6255.  NOTES
  6256.  
  6257.  SEE ALSO
  6258.   __push_list
  6259.  
  6260. --------------------------------------------------------------
  6261.  
  6262. _pop_n
  6263.  
  6264.  SYNOPSIS
  6265.   Remove objects from the stack
  6266.  
  6267.  USAGE
  6268.   _pop_n (Integer_Type n);
  6269.  
  6270.  DESCRIPTION
  6271.   The `_pop_n' function removes the specified number of objects
  6272.   from the top of the stack.
  6273.  
  6274.  SEE ALSO
  6275.   _stkdepth, pop
  6276.  
  6277. --------------------------------------------------------------
  6278.  
  6279. _print_stack
  6280.  
  6281.  SYNOPSIS
  6282.   Print the values on the stack.
  6283.  
  6284.  USAGE
  6285.   _print_stack ()
  6286.  
  6287.  DESCRIPTION
  6288.   This function dumps out what is currently on the S-Lang stack.  It does not
  6289.   alter the stack and it is usually used for debugging purposes.
  6290.  
  6291.  SEE ALSO
  6292.   _stkdepth, string, message
  6293.  
  6294. --------------------------------------------------------------
  6295.  
  6296. __push_args
  6297.  
  6298.  SYNOPSIS
  6299.   Move n function arguments onto the stack
  6300.  
  6301.  USAGE
  6302.   __push_args (Struct_Type args);
  6303.  
  6304.  DESCRIPTION
  6305.   This function together with the companion function `__pop_args'
  6306.   is useful for the creation of functions that take a variable number
  6307.   of arguments.  See the description of `__pop_args' for more
  6308.   information.
  6309.  
  6310.  NOTES
  6311.   This function has been superseded by the `__push_list' function.
  6312.  
  6313.  SEE ALSO
  6314.   __pop_args, __push_list, __pop_list, typeof, _pop_n
  6315.  
  6316. --------------------------------------------------------------
  6317.  
  6318. __push_list
  6319.  
  6320.  SYNOPSIS
  6321.   Push the elements of a list to the stack
  6322.  
  6323.  USAGE
  6324.   __push_list (List_Type list)
  6325.  
  6326.  DESCRIPTION
  6327.  This function pushes the elements of a list to the stack.
  6328.  
  6329.  EXAMPLE
  6330.  
  6331.  private define list_to_array (list)
  6332.  {
  6333.     return [__push_list (list)];
  6334.  }
  6335.  
  6336.  
  6337.  SEE ALSO
  6338.   __pop_list
  6339.  
  6340. --------------------------------------------------------------
  6341.  
  6342. _stkdepth
  6343.  
  6344.  USAGE
  6345.   Get the number of objects currently on the stack
  6346.  
  6347.  SYNOPSIS
  6348.   Integer_Type _stkdepth ()
  6349.  
  6350.  DESCRIPTION
  6351.   The `_stkdepth' function returns number of items on the stack.
  6352.  
  6353.  SEE ALSO
  6354.   _print_stack, _stk_reverse, _stk_roll
  6355.  
  6356. --------------------------------------------------------------
  6357.  
  6358. _stk_reverse
  6359.  
  6360.  SYNOPSIS
  6361.   Reverse the order of the objects on the stack
  6362.  
  6363.  USAGE
  6364.   _stk_reverse (Integer_Type n)
  6365.  
  6366.  DESCRIPTION
  6367.    The `_stk_reverse' function reverses the order of the top
  6368.    `n' items on the stack.
  6369.  
  6370.  SEE ALSO
  6371.   _stkdepth, _stk_roll
  6372.  
  6373. --------------------------------------------------------------
  6374.  
  6375. _stk_roll
  6376.  
  6377.  SYNOPSIS
  6378.   Roll items on the stack
  6379.  
  6380.  USAGE
  6381.   _stk_roll (Integer_Type n)
  6382.  
  6383.  DESCRIPTION
  6384.   This function may be used to alter the arrangement of objects on the
  6385.   stack.  Specifically, if the integer `n' is positive, the top
  6386.   `n' items on the stack are rotated up.  If
  6387.   `n' is negative, the top `abs(n)' items on the stack are
  6388.   rotated down.
  6389.  
  6390.  EXAMPLE
  6391.   If the stack looks like:
  6392.  
  6393.     item-0
  6394.     item-1
  6395.     item-2
  6396.     item-3
  6397.  
  6398.   where `item-0' is at the top of the stack, then
  6399.   `_stk_roll(-3)' will change the stack to:
  6400.  
  6401.     item-2
  6402.     item-0
  6403.     item-1
  6404.     item-3
  6405.  
  6406.  
  6407.  NOTES
  6408.   This function only has an effect if `abs(n) > 1'.
  6409.  
  6410.  SEE ALSO
  6411.   _stkdepth, _stk_reverse, _pop_n, _print_stack
  6412.  
  6413. --------------------------------------------------------------
  6414.  
  6415. clearerr
  6416.  
  6417.  SYNOPSIS
  6418.   Clear the error of a file stream
  6419.  
  6420.  USAGE
  6421.   clearerr (File_Type fp
  6422.  
  6423.  DESCRIPTION
  6424.   The `clearerr' function clears the error and end-of-file flags
  6425.   associated with the open file stream `fp'.
  6426.  
  6427.  SEE ALSO
  6428.   ferror, feof, fopen
  6429.  
  6430. --------------------------------------------------------------
  6431.  
  6432. fclose
  6433.  
  6434.  SYNOPSIS
  6435.   Close a file
  6436.  
  6437.  USAGE
  6438.   Integer_Type fclose (File_Type fp)
  6439.  
  6440.  DESCRIPTION
  6441.   The `fclose' function may be used to close an open file pointer
  6442.   `fp'.  Upon success it returns zero, and upon failure it sets
  6443.   `errno' and returns `-1'.  Failure usually indicates a that
  6444.   the file system is full or that `fp' does not refer to an open file.
  6445.  
  6446.  NOTES
  6447.   Many C programmers call `fclose' without checking the return
  6448.   value.  The S-Lang language requires the programmer to explicitly
  6449.   handle any value returned by a function.  The simplest way to
  6450.   handle the return value from `fclose' is to call it via:
  6451.  
  6452.      () = fclose (fp);
  6453.  
  6454.  
  6455.  SEE ALSO
  6456.   fopen, fgets, fflush, pclose, errno
  6457.  
  6458. --------------------------------------------------------------
  6459.  
  6460. fdopen
  6461.  
  6462.  SYNOPSIS
  6463.   Convert a FD_Type file descriptor to a stdio File_Type object
  6464.  
  6465.  USAGE
  6466.   File_Type fdopen (FD_Type, String_Type mode)
  6467.  
  6468.  DESCRIPTION
  6469.    The `fdopen' function creates and returns a stdio
  6470.    File_Type object from the open FD_Type
  6471.    descriptor `fd'.  The `mode' parameter corresponds to the
  6472.    `mode' parameter of the `fopen' function and must be
  6473.    consistent with the mode of the descriptor `fd'.  The function
  6474.    returns NULL upon failure and sets `errno'.
  6475.  
  6476.  NOTES
  6477.    The `fclose' function does not close the File_Type object
  6478.    returned from this function.  The underlying file object must be
  6479.    closed by the `close' function.
  6480.  
  6481.  SEE ALSO
  6482.   fileno, fopen, open, close, fclose
  6483.  
  6484. --------------------------------------------------------------
  6485.  
  6486. feof
  6487.  
  6488.  SYNOPSIS
  6489.   Get the end-of-file status
  6490.  
  6491.  USAGE
  6492.   Integer_Type feof (File_Type fp)
  6493.  
  6494.  DESCRIPTION
  6495.   This function may be used to determine the state of the end-of-file
  6496.   indicator of the open file descriptor `fp'.  It returns zero
  6497.   if the indicator is not set, or non-zero if it is.  The end-of-file
  6498.   indicator may be cleared by the `clearerr' function.
  6499.  
  6500.  SEE ALSO
  6501.   ferror, clearerr, fopen
  6502.  
  6503. --------------------------------------------------------------
  6504.  
  6505. ferror
  6506.  
  6507.  SYNOPSIS
  6508.   Determine the error status of an open file descriptor
  6509.  
  6510.  USAGE
  6511.   Integer_Type ferror (File_Type fp)
  6512.  
  6513.  DESCRIPTION
  6514.   This function may be used to determine the state of the error
  6515.   indicator of the open file descriptor `fp'.  It returns zero
  6516.   if the indicator is not set, or non-zero if it is.  The error
  6517.   indicator may be cleared by the `clearerr' function.
  6518.  
  6519.  SEE ALSO
  6520.   feof, clearerr, fopen
  6521.  
  6522. --------------------------------------------------------------
  6523.  
  6524. fflush
  6525.  
  6526.  SYNOPSIS
  6527.   Flush an output stream
  6528.  
  6529.  USAGE
  6530.   Integer_Type fflush (File_Type fp)
  6531.  
  6532.  DESCRIPTION
  6533.   The `fflush' function may be used to update the stdio _output_
  6534.   stream specified by `fp'.  It returns 0 upon success, or
  6535.   -1 upon failure and sets `errno' accordingly.  In
  6536.   particular, this function will fail if `fp' does not represent
  6537.   an open output stream, or if `fp' is associated with a disk file and
  6538.   there is insufficient disk space.
  6539.  
  6540.  EXAMPLE
  6541.   This example illustrates how to use the `fflush' function
  6542.   without regard to the return value:
  6543.  
  6544.     () = fputs ("Enter value> ", stdout);
  6545.     () = fflush (stdout);
  6546.  
  6547.  
  6548.  SEE ALSO
  6549.   fopen, fclose
  6550.  
  6551. --------------------------------------------------------------
  6552.  
  6553. fgets
  6554.  
  6555.  SYNOPSIS
  6556.   Read a line from a file
  6557.  
  6558.  USAGE
  6559.   Integer_Type fgets (SLang_Ref_Type ref, File_Type fp)
  6560.  
  6561.  DESCRIPTION
  6562.   `fgets' reads a line from the open file specified by `fp'
  6563.   and places the characters in the variable whose reference is
  6564.   specified by `ref'.
  6565.   It returns -1 if `fp' is not associated with an open file
  6566.   or an attempt was made to read at the end the file; otherwise, it
  6567.   returns the number of characters read.
  6568.  
  6569.  EXAMPLE
  6570.   The following example returns the lines of a file via a linked list:
  6571.  
  6572.     define read_file (file)
  6573.     {
  6574.        variable buf, fp, root, tail;
  6575.        variable list_type = struct { text, next };
  6576.  
  6577.        root = NULL;
  6578.  
  6579.        fp = fopen(file, "r");
  6580.        if (fp == NULL)
  6581.          error("fopen %s failed." file);
  6582.        while (-1 != fgets (&buf, fp))
  6583.          {
  6584.             if (root == NULL)
  6585.               {
  6586.                  root = @list_type;
  6587.                  tail = root;
  6588.               }
  6589.             else
  6590.               {
  6591.                  tail.next = @list_type;
  6592.                  tail = tail.next;
  6593.               }
  6594.             tail.text = buf;
  6595.             tail.next = NULL;
  6596.          }
  6597.        () = fclose (fp);
  6598.        return root;
  6599.     }
  6600.  
  6601.  
  6602.  SEE ALSO
  6603.   fgetslines, fopen, fclose, fputs, fread, error
  6604.  
  6605. --------------------------------------------------------------
  6606.  
  6607. fgetslines
  6608.  
  6609.  SYNOPSIS
  6610.   Read lines as an array from an open file
  6611.  
  6612.  USAGE
  6613.   String_Type[] fgetslines (File_Type fp [,Int_Type num])
  6614.  
  6615.  DESCRIPTION
  6616.   The `fgetslines' function reads lines a specified number of
  6617.   lines as an array of strings from the file associated with the
  6618.   file pointer `fp'.  If the number of lines to be read is left
  6619.   unspecified, the function will return the rest of the lines in the
  6620.   file.  If the file is empty, an empty string array will be returned.
  6621.   The function returns NULL upon error.
  6622.  
  6623.  EXAMPLE
  6624.   The following function returns the number of lines in a file:
  6625.  
  6626.     define count_lines_in_file (file)
  6627.     {
  6628.        variable fp, lines;
  6629.  
  6630.        fp = fopen (file, "r");
  6631.        if (fp == NULL)
  6632.          return -1;
  6633.  
  6634.        lines = fgetslines (fp);
  6635.        if (lines == NULL)
  6636.          return -1;
  6637.  
  6638.        return length (lines);
  6639.     }
  6640.  
  6641.   Note that the file was implicitly closed when the variable `fp'
  6642.   goes out of scope (in the case, when the function returns).
  6643.  
  6644.  SEE ALSO
  6645.   fgets, fread, fopen, fputslines
  6646.  
  6647. --------------------------------------------------------------
  6648.  
  6649. fopen
  6650.  
  6651.  SYNOPSIS
  6652.   Open a file
  6653.  
  6654.  USAGE
  6655.   File_Type fopen (String_Type f, String_Type m)
  6656.  
  6657.  DESCRIPTION
  6658.   The `fopen' function opens a file `f' according to the mode
  6659.   string `m'.  Allowed values for `m' are:
  6660.  
  6661.      "r"    Read only
  6662.      "w"    Write only
  6663.      "a"    Append
  6664.      "r+"   Reading and writing at the beginning of the file.
  6665.      "w+"   Reading and writing.  The file is created if it does not
  6666.               exist; otherwise, it is truncated.
  6667.      "a+"   Reading and writing at the end of the file.  The file is created
  6668.               if it does not already exist.
  6669.  
  6670.   In addition, the mode string can also include the letter `'b''
  6671.   as the last character to indicate that the file is to be opened in
  6672.   binary mode.
  6673.  
  6674.   Upon success, `fopen' returns a File_Type object which is
  6675.   meant to be used by other operations that require an open file
  6676.   pointer.  Upon failure, the function returns NULL.
  6677.  
  6678.  EXAMPLE
  6679.   The following function opens a file in append mode and writes a
  6680.   string to it:
  6681.  
  6682.     define append_string_to_file (file, str)
  6683.     {
  6684.        variable fp = fopen (file, "a");
  6685.        if (fp == NULL)
  6686.          throw OpenError, "$file could not be opened"$;
  6687.        () = fputs (string, fp);
  6688.        () = fclose (fp);
  6689.     }
  6690.  
  6691.   Note that the return values from `fputs' and `fclose' were
  6692.   ignored.
  6693.  
  6694.  NOTES
  6695.   There is no need to explicitly close a file opened with `fopen'.
  6696.   If the returned File_Type object goes out of scope, the
  6697.   interpreter will automatically close the file.  However, explicitly
  6698.   closing a file with `fclose' and checking its return value is
  6699.   recommended.
  6700.  
  6701.  SEE ALSO
  6702.   fclose, fgets, fputs, popen
  6703.  
  6704. --------------------------------------------------------------
  6705.  
  6706. fprintf
  6707.  
  6708.  SYNOPSIS
  6709.   Create and write a formatted string to a file
  6710.  
  6711.  USAGE
  6712.   Int_Type fprintf (File_Type fp, String_Type fmt, ...)
  6713.  
  6714.  DESCRIPTION
  6715.   `fprintf' formats the objects specified by the variable argument
  6716.   list according to the format `fmt' and write the result to the
  6717.   open file pointer `fp'.
  6718.  
  6719.   The format string obeys the same syntax and semantics as the
  6720.   `sprintf' format string.  See the description of the
  6721.   `sprintf' function for more information.
  6722.  
  6723.   `fprintf' returns the number of bytes written to the file,
  6724.   or -1 upon error.
  6725.  
  6726.  SEE ALSO
  6727.   fputs, printf, fwrite, message
  6728.  
  6729. --------------------------------------------------------------
  6730.  
  6731. fputs
  6732.  
  6733.  SYNOPSIS
  6734.   Write a string to an open stream
  6735.  
  6736.  USAGE
  6737.   Integer_Type fputs (String_Type s, File_Type fp)
  6738.  
  6739.  DESCRIPTION
  6740.   The `fputs' function writes the string `s' to the open file
  6741.   pointer `fp'. It returns -1 upon failure and sets `errno',
  6742.   otherwise it returns the length of the string.
  6743.  
  6744.  EXAMPLE
  6745.   The following function opens a file in append mode and uses the
  6746.   `fputs' function to write to it.
  6747.  
  6748.     define append_string_to_file (str, file)
  6749.     {
  6750.        variable fp;
  6751.        fp = fopen (file, "a");
  6752.        if (fp == NULL)
  6753.          throw OpenError, "Unable to open $file"$;
  6754.        if ((-1 == fputs (s, fp))
  6755.            or (-1 == fclose (fp)))
  6756.          throw WriteError, "Error writing to $file";
  6757.     }
  6758.  
  6759.  
  6760.  NOTES
  6761.   One must not disregard the return value from the `fputs'
  6762.   function.  Doing so may lead to a stack overflow error.
  6763.  
  6764.   To write an object that contains embedded null characters, use the
  6765.   `fwrite' function.
  6766.  
  6767.  SEE ALSO
  6768.   fclose, fopen, fgets, fwrite
  6769.  
  6770. --------------------------------------------------------------
  6771.  
  6772. fputslines
  6773.  
  6774.  SYNOPSIS
  6775.   Write an array of strings to an open file
  6776.  
  6777.  USAGE
  6778.   Int_Type fputslines (String_Type[]a, File_Type fp)
  6779.  
  6780.  DESCRIPTION
  6781.   The `fputslines' function writes an array of strings to the
  6782.   specified file pointer.  It returns the number of elements
  6783.   successfully written.  Any NULL elements in the array will be
  6784.   skipped.
  6785.  
  6786.  EXAMPLE
  6787.  
  6788.     if (length (lines) != fputslines (fp, lines))
  6789.       throw WriteError;
  6790.  
  6791.  
  6792.  SEE ALSO
  6793.   fputs, fgetslines, fopen
  6794.  
  6795. --------------------------------------------------------------
  6796.  
  6797. fread
  6798.  
  6799.  SYNOPSIS
  6800.   Read binary data from a file
  6801.  
  6802.  USAGE
  6803.   UInt_Type fread (Ref_Type b, DataType_Type t, UInt_Type n, File_Type fp)
  6804.  
  6805.  DESCRIPTION
  6806.   The `fread' function may be used to read `n' objects of type
  6807.   `t' from an open file pointer `fp'.  Upon success, it
  6808.   returns the number of objects read from the file and places the
  6809.   objects in variable specified by `b'.  Upon error or
  6810.   end-of-file, it returns -1 and sets `errno' accordingly.
  6811.  
  6812.   If more than one object is read from the file, those objects will be
  6813.   placed in an array of the appropriate size.
  6814.  
  6815.  EXAMPLE
  6816.   The following example illustrates how to read 50 integers from a file:
  6817.  
  6818.      define read_50_ints_from_a_file (file)
  6819.      {
  6820.         variable fp, n, buf;
  6821.  
  6822.         fp = fopen (file, "rb");
  6823.         if (fp == NULL)
  6824.           throw OpenError;
  6825.         n = fread (&buf, Int_Type, 50, fp);
  6826.         if (n == -1)
  6827.           throw ReadError, "fread failed";
  6828.         () = fclose (fp);
  6829.         return buf;
  6830.      }
  6831.  
  6832.  
  6833.  NOTES
  6834.   Use the `pack' and `unpack' functions to read data with a
  6835.   specific byte-ordering.
  6836.  
  6837.   The `fread_bytes' function may be used to read a specified number of
  6838.   bytes in the form of a binary string (`BString_Type').
  6839.  
  6840.  SEE ALSO
  6841.   fread_bytes, fwrite, fgets, fopen, pack, unpack
  6842.  
  6843. --------------------------------------------------------------
  6844.  
  6845. fread_bytes
  6846.  
  6847.  SYNOPSIS
  6848.   Read bytes from a file as a binary-string
  6849.  
  6850.  USAGE
  6851.   UInt_Type fread_bytes (Ref_Type b, UInt_Type n, File_Type fp)
  6852.  
  6853.  DESCRIPTION
  6854.   The `fread_bytes' function may be used to read `n' bytes
  6855.   from from an open file pointer `fp'.  Upon success, it returns
  6856.   the number of bytes read from the file and assigns to the variable
  6857.   attached to the reference `b' a binary string formed from the
  6858.   bytes read.  Upon error or end of file, the function returns
  6859.   -1 and sets `errno' accordingly.
  6860.  
  6861.  NOTES
  6862.   Use the `pack' and `unpack' functions to read data with a
  6863.   specific byte-ordering.
  6864.  
  6865.  SEE ALSO
  6866.   fread, fwrite, fgets, fopen, pack, unpack
  6867.  
  6868. --------------------------------------------------------------
  6869.  
  6870. fseek
  6871.  
  6872.  SYNOPSIS
  6873.   Reposition a stdio stream
  6874.  
  6875.  USAGE
  6876.   Integer_Type fseek (File_Type fp, LLong_Type ofs, Integer_Type whence
  6877.  
  6878.  DESCRIPTION
  6879.   The `fseek' function may be used to reposition the file position
  6880.   pointer associated with the open file stream `fp'. Specifically,
  6881.   it moves the pointer `ofs' bytes relative to the position
  6882.   indicated by `whence'.  If `whence' is set to one of the symbolic
  6883.   constants SEEK_SET, SEEK_CUR, or SEEK_END, the
  6884.   offset is relative to the start of the file, the current position
  6885.   indicator, or end-of-file, respectively.
  6886.  
  6887.   The function returns 0 upon success, or -1 upon failure and sets
  6888.   `errno' accordingly.
  6889.  
  6890.  EXAMPLE
  6891.     define rewind (fp)
  6892.     {
  6893.        if (0 == fseek (fp, 0, SEEK_SET)) return;
  6894.        vmessage ("rewind failed, reason: %s", errno_string (errno));
  6895.     }
  6896.  
  6897.  SEE ALSO
  6898.   ftell, fopen
  6899.  
  6900. --------------------------------------------------------------
  6901.  
  6902. ftell
  6903.  
  6904.  SYNOPSIS
  6905.   Obtain the current position in an open stream
  6906.  
  6907.  USAGE
  6908.   LLong_Type ftell (File_Type fp)
  6909.  
  6910.  DESCRIPTION
  6911.   The ftell function may be used to obtain the current position in the
  6912.   stream associated with the open file pointer `fp'.  It returns
  6913.   the position of the pointer measured in bytes from the beginning of
  6914.   the file.  Upon error, it returns `-1' and sets `errno'
  6915.   accordingly.
  6916.  
  6917.  SEE ALSO
  6918.   fseek, fopen
  6919.  
  6920. --------------------------------------------------------------
  6921.  
  6922. fwrite
  6923.  
  6924.  SYNOPSIS
  6925.   Write binary data to a file
  6926.  
  6927.  USAGE
  6928.   UInt_Type fwrite (b, File_Type fp)
  6929.  
  6930.  DESCRIPTION
  6931.   The `fwrite' function may be used to write the object represented by
  6932.   `b' to an open file.  If `b' is a string or an array, the
  6933.   function will attempt to write all elements of the object to the
  6934.   file.  It returns the number of elements successfully written,
  6935.   otherwise it returns -1 upon error and sets `errno'
  6936.   accordingly.
  6937.  
  6938.  EXAMPLE
  6939.   The following example illustrates how to write an integer array to a
  6940.   file.  In this example, `fp' is an open file descriptor:
  6941.  
  6942.      variable a = [1:50];     % 50 element integer array
  6943.      if (50 != fwrite (a, fp))
  6944.        throw WriteError;
  6945.  
  6946.   Here is how to write the array one element at a time:
  6947.  
  6948.      variable ai, a = [1:50];
  6949.  
  6950.      foreach ai (a)
  6951.        {
  6952.           if (1 != fwrite(ai, fp))
  6953.             throw WriteError;
  6954.        }
  6955.  
  6956.  
  6957.  NOTES
  6958.   Not all data types may be supported the `fwrite' function.  It
  6959.   is supported by all vector, scalar, and string objects.
  6960.  
  6961.  SEE ALSO
  6962.   fread, fputs, fopen, pack, unpack
  6963.  
  6964. --------------------------------------------------------------
  6965.  
  6966. pclose
  6967.  
  6968.  SYNOPSIS
  6969.   Close a process pipe
  6970.  
  6971.  USAGE
  6972.   Integer_Type pclose (File_Type fp)
  6973.  
  6974.  DESCRIPTION
  6975.   The `pclose' function waits for the process associated with
  6976.   `fp' to exit and the returns the exit status of the command.
  6977.  
  6978.  SEE ALSO
  6979.   pclose, fclose
  6980.  
  6981. --------------------------------------------------------------
  6982.  
  6983. popen
  6984.  
  6985.  SYNOPSIS
  6986.   Open a pipe to a process
  6987.  
  6988.  USAGE
  6989.   File_Type popen (String_Type cmd, String_Type mode)
  6990.  
  6991.  DESCRIPTION
  6992.   The `popen' function executes a process specified by `cmd'
  6993.   and opens a unidirectional pipe to the newly created process.  The
  6994.   `mode' indicates whether or not the pipe is open for reading
  6995.   or writing.  Specifically, if `mode' is `"r"', then the
  6996.   pipe is opened for reading, or if `mode' is `"w"', then the
  6997.   pipe will be open for writing.
  6998.  
  6999.   Upon success, a File_Type pointer will be returned, otherwise
  7000.   the function failed and NULL will be returned.
  7001.  
  7002.  NOTES
  7003.   This function is not available on all systems.
  7004.  
  7005.  SEE ALSO
  7006.   pclose, fopen
  7007.  
  7008. --------------------------------------------------------------
  7009.  
  7010. printf
  7011.  
  7012.  SYNOPSIS
  7013.   Create and write a formatted string to stdout
  7014.  
  7015.  USAGE
  7016.   Int_Type printf (String_Type fmt, ...)
  7017.  
  7018.  DESCRIPTION
  7019.   `printf' formats the objects specified by the variable argument
  7020.   list according to the format `fmt' and write the result to
  7021.   `stdout'.  This function is equivalent to `fprintf' used
  7022.   with the `stdout' file pointer.  See `fprintf' for more
  7023.   information.
  7024.  
  7025.   `printf' returns the number of bytes written or -1 upon error.
  7026.  
  7027.  NOTES
  7028.   Many C programmers do not check the return status of the
  7029.   `printf' C library function.  Make sure that if you do not care
  7030.   about whether or not the function succeeds, then code it as in the
  7031.   following example:
  7032.  
  7033.      () = printf ("%s laid %d eggs\n", chicken_name, num_egg);
  7034.  
  7035.  
  7036.  SEE ALSO
  7037.   fputs, printf, fwrite, message
  7038.  
  7039. --------------------------------------------------------------
  7040.  
  7041. count_char_occurances
  7042.  
  7043.  SYNOPSIS
  7044.   Count the number of occurances of a character in a string
  7045.  
  7046.  USAGE
  7047.   UInt_Type count_char_occurances (str, ch)
  7048.  
  7049.  DESCRIPTION
  7050.   This function returns the number of times the specified character
  7051.   `ch' occurs in the string `str'.
  7052.  
  7053.  NOTES
  7054.   If UTF-8 mode is in effect, then the character may correspond to
  7055.   more than one byte.  In such a case, the function returns the number
  7056.   of such byte-sequences in the string.  To count actual bytes, use
  7057.   the `count_byte_occurances' function.
  7058.  
  7059.  SEE ALSO
  7060.   count_byte_occurances
  7061.  
  7062. --------------------------------------------------------------
  7063.  
  7064. create_delimited_string
  7065.  
  7066.  SYNOPSIS
  7067.   Concatenate strings using a delimiter
  7068.  
  7069.  USAGE
  7070.   String_Type create_delimited_string (delim, s_1, s_2, ..., s_n, n)
  7071.  
  7072.     String_Type delim, s_1, ..., s_n
  7073.     Int_Type n
  7074.  
  7075.  
  7076.  DESCRIPTION
  7077.   `create_delimited_string' performs a concatenation operation on
  7078.   the `n' strings `s_1', ...,`s_n', using the string
  7079.   `delim' as a delimiter.  The resulting string is equivalent to
  7080.   one obtained via
  7081.  
  7082.       s_1 + delim + s_2 + delim + ... + s_n
  7083.  
  7084.  
  7085.  EXAMPLE
  7086.  
  7087.     create_delimited_string ("/", "user", "local", "bin", 3);
  7088.  
  7089.   will produce `"usr/local/bin"'.
  7090.  
  7091.  NOTES
  7092.   New code should use the `strjoin' function, which performs a
  7093.   similar task.
  7094.  
  7095.  SEE ALSO
  7096.   strjoin, is_list_element, extract_element, strchop, strcat
  7097.  
  7098. --------------------------------------------------------------
  7099.  
  7100. extract_element
  7101.  
  7102.  SYNOPSIS
  7103.   Extract the nth element of a string with delimiters
  7104.  
  7105.  USAGE
  7106.   String_Type extract_element (String_Type list, Int_Type nth, Int_Type delim)
  7107.  
  7108.  DESCRIPTION
  7109.   The `extract_element' function may be used to extract the
  7110.   `nth' substring of a string delimited by the character given by
  7111.   the `delim' parameter.  If the string contains fewer than the
  7112.   requested substring, the function will return NULL.  Substring
  7113.   elements are numbered from 0.
  7114.  
  7115.  EXAMPLE
  7116.   The expression
  7117.  
  7118.      extract_element ("element 0, element 1, element 2", 1, ',')
  7119.  
  7120.   returns the string `" element 1"', whereas
  7121.  
  7122.      extract_element ("element 0, element 1, element 2", 1, ' ')
  7123.  
  7124.   returns `"0,"'.
  7125.  
  7126.   The following function may be used to compute the number of elements
  7127.   in the list:
  7128.  
  7129.      define num_elements (list, delim)
  7130.      {
  7131.         variable nth = 0;
  7132.         while (NULL != extract_element (list, nth, delim))
  7133.           nth++;
  7134.         return nth;
  7135.      }
  7136.  
  7137.   Alternatively, the `strchop' function may be more useful.  In
  7138.   fact, `extract_element' may be expressed in terms of the
  7139.   function `strchop' as
  7140.  
  7141.     define extract_element (list, nth, delim)
  7142.     {
  7143.        list = strchop(list, delim, 0);
  7144.        if (nth >= length (list))
  7145.          return NULL;
  7146.        else
  7147.          return list[nth];
  7148.     }
  7149.  
  7150.    and the `num_elements' function used above may be recoded more
  7151.    simply as:
  7152.  
  7153.     define num_elements (list, delim)
  7154.     {
  7155.        return length (strchop (length, delim, 0));
  7156.     }
  7157.  
  7158.  
  7159.  NOTES
  7160.   New code should make use of the `List_Type' object for lists.
  7161.  
  7162.  SEE ALSO
  7163.   is_list_element, is_substr, strtok, strchop, create_delimited_string
  7164.  
  7165. --------------------------------------------------------------
  7166.  
  7167. glob_to_regexp
  7168.  
  7169.  SYNOPSIS
  7170.   Convert a globbing expression to a regular expression
  7171.  
  7172.  USAGE
  7173.   String_Type glob_to_regexp (String_Type g)
  7174.  
  7175.  DESCRIPTION
  7176.   This function may be used to convert a so-called globbing expression
  7177.   to a regular expression.  A globbing expression is frequently used
  7178.   for matching filenames where '?' represents a single character and
  7179.   '*' represents 0 or more characters.
  7180.  
  7181.  NOTES
  7182.   The `slsh' program that is distributed with the S-Lang library
  7183.   includes a function called `glob' that is a wrapper around
  7184.   `glob_to_regexp' and `listdir'.  It returns a list of
  7185.   filenames matching a globbing expression.
  7186.  
  7187.  SEE ALSO
  7188.   string_match, listdir
  7189.  
  7190. --------------------------------------------------------------
  7191.  
  7192. is_list_element
  7193.  
  7194.  SYNOPSIS
  7195.   Test whether a delimited string contains a specific element
  7196.  
  7197.  USAGE
  7198.   Int_Type is_list_element (String_Type list, String_Type elem, Int_Type delim)
  7199.  
  7200.  DESCRIPTION
  7201.   The `is_list_element' function may be used to determine whether
  7202.   or not a delimited list of substring, `list', contains the element
  7203.   `elem'.  If `elem' is not an element of `list', the function
  7204.   will return zero, otherwise, it returns 1 plus the matching element
  7205.   number.
  7206.  
  7207.  EXAMPLE
  7208.   The expression
  7209.  
  7210.      is_list_element ("element 0, element 1, element 2", "0,", ' ');
  7211.  
  7212.   returns `2' since `"0,"' is element number one of the list
  7213.   (numbered from zero).
  7214.  
  7215.  SEE ALSO
  7216.   extract_element, is_substr, create_delimited_string
  7217.  
  7218. --------------------------------------------------------------
  7219.  
  7220. is_substr
  7221.  
  7222.  SYNOPSIS
  7223.   Test for a specified substring within a string
  7224.  
  7225.  USAGE
  7226.   Int_Type is_substr (String_Type a, String_Type b)
  7227.  
  7228.  DESCRIPTION
  7229.   This function may be used to determine if `a' contains the
  7230.   string `b'.  If it does not, the function returns 0; otherwise it
  7231.   returns the position of the first occurrence of `b' in `a'
  7232.   expressed in terms of characters, not bytes.
  7233.  
  7234.  NOTES
  7235.   This function regards the first character of a string to be given by
  7236.   a position value of 1.
  7237.  
  7238.   The distinction between characters and bytes is significant in UTF-8
  7239.   mode.
  7240.  
  7241.  SEE ALSO
  7242.   substr, string_match, strreplace
  7243.  
  7244. --------------------------------------------------------------
  7245.  
  7246. make_printable_string
  7247.  
  7248.  SYNOPSIS
  7249.   Format a string suitable for parsing
  7250.  
  7251.  USAGE
  7252.   String_Type make_printable_string(String_Type str)
  7253.  
  7254.  DESCRIPTION
  7255.   This function formats a string in such a way that it may be used as
  7256.   an argument to the `eval' function.  The resulting string is
  7257.   identical to `str' except that it is enclosed in double quotes
  7258.   and the backslash, newline, control, and double quote characters are
  7259.   expanded.
  7260.  
  7261.  SEE ALSO
  7262.   eval, str_quote_string
  7263.  
  7264. --------------------------------------------------------------
  7265.  
  7266. Sprintf
  7267.  
  7268.  SYNOPSIS
  7269.   Format objects into a string (deprecated)
  7270.  
  7271.  USAGE
  7272.   String_Type Sprintf (String_Type format, ..., Int_Type n)
  7273.  
  7274.  DESCRIPTION
  7275.   This function performs a similar task as the `sprintf'
  7276.   function but requires an additional argument that specifies the
  7277.   number of items to format.  For this reason, the `sprintf'
  7278.   function should be used.
  7279.  
  7280.  SEE ALSO
  7281.   sprintf, string, sscanf, vmessage
  7282.  
  7283. --------------------------------------------------------------
  7284.  
  7285. sprintf
  7286.  
  7287.  SYNOPSIS
  7288.   Format objects into a string
  7289.  
  7290.  USAGE
  7291.   String_Type sprintf (String fmt, ...)
  7292.  
  7293.  DESCRIPTION
  7294.   The `sprintf' function formats a string from a variable number
  7295.   of arguments according to according to the format specification
  7296.   string `fmt'.
  7297.  
  7298.   The format string is a C library `sprintf' style format
  7299.   descriptor.  Briefly, the format string may consist of ordinary
  7300.   characters (not including the `%' character), which are copied
  7301.   into the output string as-is, and conversion specification sequences
  7302.   introduced by the `%' character.  The number of additional
  7303.   arguments passed to the `sprintf' function must be consistent
  7304.   with the number required by the format string.
  7305.  
  7306.   The `%' character in the format string starts a conversion
  7307.   specification that indicates how an object is to be formatted.
  7308.   Usually the percent character is followed immediately by a
  7309.   conversion specification character.  However, it may optionally be
  7310.   followed by flag characters, field width characters, and precision
  7311.   modifiers, as described below.
  7312.  
  7313.   The character immediately following the `%' character may be
  7314.   one or more of the following flag characters:
  7315.  
  7316.     -         Use left-justification
  7317.     #         Use alternate form for formatting.
  7318.     0         Use 0 padding
  7319.     +         Preceed a number by a plus or minus sign.
  7320.     (space)   Use a blank instead of a plus sign.
  7321.  
  7322.  
  7323.   The flag characters (if any) may be followed by an optional field
  7324.   width specification string represented by one or more digit
  7325.   characters.  If the size of the formatted object is less than the
  7326.   field width, it will be right-justified in the specified field
  7327.   width, unless the `-' flag was given, in which case it will be
  7328.   left justified.
  7329.  
  7330.   If the next character in the control sequence is a period, then it
  7331.   introduces a precision specification sequence.  The precision is
  7332.   given by the digit characters following the period.  If none are
  7333.   given the precision is taken to be 0.  The meaning of the precision
  7334.   specifier depends upon the type of conversion:  For integer
  7335.   conversions, it gives the minimum number digits to appear in the
  7336.   output.  For `e' and `f' floating point conversions, it
  7337.   gives the number of digits to appear after the decimal point.  For
  7338.   the `g' floating point conversion, it gives the maximum number
  7339.   of significant digits to appear.  Finally for the `s' and
  7340.   `S' conversions it specifies the maximum number of characters
  7341.   to be copied to the output string.
  7342.  
  7343.   The next character in the sequence may be a modifier that controls
  7344.   the size of object to be formatted. It may consist of the following
  7345.   characters:
  7346.  
  7347.      h    This character is ignored in the current implementation.
  7348.      l    The integer is be formatted as a long integer, or a
  7349.           character as a wide character.
  7350.  
  7351.  
  7352.   Finally the conversion specification sequence ends with the
  7353.   conversion specification character that describes how the object is
  7354.   to be
  7355.   formatted:
  7356.  
  7357.      s    as a string
  7358.      f    as a floating point number
  7359.      e    as a float using exponential form, e.g., 2.345e08
  7360.      g    format as e or g, depending upon its value
  7361.      c    as a character
  7362.      %    a literal percent character
  7363.      d    as a signed decimal integer
  7364.      u    as an unsigned decimal integer
  7365.      o    as an octal integer
  7366.      X    as hexadecimal
  7367.      S    convert object to a string and format accordingly
  7368.  
  7369.   The `S' conversion specifier is a S-Lang extension which will
  7370.   cause the corresponding object to be converted to a string using the
  7371.   `string' function, and then converted as `s'. formatted as
  7372.   string.  In fact, `sprintf("%S",x)' is equivalent to
  7373.   `sprintf("%s",string(x))'.
  7374.  
  7375.  EXAMPLE
  7376.  
  7377.     sprintf("%s","hello")               ===> "hello"
  7378.     sprintf("%s %s","hello", "world")   ===> "hello world"
  7379.     sprintf("Agent %.3d",7)             ===> "Agent 007"
  7380.     sprintf("%S",PI)                    ===> "3.14159"
  7381.     sprintf("%g",PI)                    ===> "3.14159"
  7382.     sprintf("%.2g",PI)                  ===> "3.1"
  7383.     sprintf("%.2e",PI)                  ===> "3.14e+00"
  7384.     sprintf("%.2f",PI)                  ===> "3.14"
  7385.     sprintf("|% 8.2f|",PI)              ===> "|    3.14|"
  7386.     sprintf("|%-8.2f|",PI)              ===> "|3.14    |"
  7387.     sprintf("|%+8.2f|",PI)              ===> "|   +3.14|"
  7388.     sprintf("%S",{1,2,3})               ===> "List_Type with 3 elements"
  7389.     sprintf("%S",1+2i)                  ===> "(1 + 2i)"
  7390.  
  7391.  
  7392.  NOTES
  7393.   The `set_float_format' function controls the format for the
  7394.   `S' conversion of floating point numbers.
  7395.  
  7396.  SEE ALSO
  7397.   string, sscanf, message
  7398.  
  7399. --------------------------------------------------------------
  7400.  
  7401. sscanf
  7402.  
  7403.  SYNOPSIS
  7404.   Parse a formatted string
  7405.  
  7406.  USAGE
  7407.   Int_Type sscanf (s, fmt, r1, ... rN)
  7408.  
  7409.     String_Type s, fmt;
  7410.     Ref_Type r1, ..., rN
  7411.  
  7412.  
  7413.  DESCRIPTION
  7414.  The `sscanf' function parses the string `s' according to the
  7415.  format `fmt' and sets the variables whose references are given by
  7416.  `r1', ..., `rN'.  The function returns the number of
  7417.  references assigned, or throws an exception upon error.
  7418.  
  7419.  The format string `fmt' consists of ordinary characters and
  7420.  conversion specifiers.  A conversion specifier begins with the
  7421.  special character `%' and is described more fully below.  A white
  7422.  space character in the format string matches any amount of whitespace
  7423.  in the input string.  Parsing of the format string stops whenever a
  7424.  match fails.
  7425.  
  7426.  The `%' character is used to denote a conversion specifier whose
  7427.  general form is given by `%[*][width][type]format' where the
  7428.  brackets indicate optional items.  If `*' is present, then the
  7429.  conversion will be performed but no assignment to a reference will be
  7430.  made.  The `width' specifier specifies the maximum field width to
  7431.  use for the conversion.  The `type' modifier is used to indicate
  7432.  the size of the object, e.g., a short integer, as follows.
  7433.  
  7434.  If _type_ is given as the character `h', then if the format
  7435.  conversion is for an integer (`dioux'), the object assigned will
  7436.  be a short integer.  If _type_ is `l', then the conversion
  7437.  will be to a long integer for integer conversions, or to a double
  7438.  precision floating point number for floating point conversions.
  7439.  
  7440.  The format specifier is a character that specifies the conversion:
  7441.  
  7442.        %     Matches a literal percent character.  No assignment is
  7443.              performed.
  7444.        d     Matches a signed decimal integer.
  7445.        D     Matches a long decimal integer (equiv to `ld')
  7446.        u     Matches an unsigned decimal integer
  7447.        U     Matches an unsigned long decimal integer (equiv to `lu')
  7448.        i     Matches either a hexadecimal integer, decimal integer, or
  7449.              octal integer.
  7450.        I     Equivalent to `li'.
  7451.        x     Matches a hexadecimal integer.
  7452.        X     Matches a long hexadecimal integer (same as `lx').
  7453.        e,f,g Matches a decimal floating point number (Float_Type).
  7454.        E,F,G Matches a double precision floating point number, same as `lf'.
  7455.        s     Matches a string of non-whitespace characters (String_Type).
  7456.        c     Matches one character.  If width is given, width
  7457.              characters are matched.
  7458.        n     Assigns the number of characters scanned so far.
  7459.        [...] Matches zero or more characters from the set of characters
  7460.              enclosed by the square brackets.  If '^' is given as the
  7461.              first character, then the complement set is matched.
  7462.  
  7463.  
  7464.  EXAMPLE
  7465.  Suppose that `s' is `"Coffee: (3,4,12.4)"'.  Then
  7466.  
  7467.     n = sscanf (s, "%[a-zA-Z]: (%d,%d,%lf)", &item, &x, &y, &z);
  7468.  
  7469.  will set `n' to 4, `item' to `"Coffee"', `x' to 3,
  7470.  `y' to 4, and `z' to the double precision number
  7471.  `12.4'.  However,
  7472.  
  7473.     n = sscanf (s, "%s: (%d,%d,%lf)", &item, &x, &y, &z);
  7474.  
  7475.  will set `n' to 1, `item' to `"Coffee:"' and the
  7476.  remaining variables will not be assigned.
  7477.  
  7478.  SEE ALSO
  7479.   sprintf, unpack, string, atof, int, integer, string_match
  7480.  
  7481. --------------------------------------------------------------
  7482.  
  7483. strbytelen
  7484.  
  7485.  SYNOPSIS
  7486.   Get the number of bytes in a string
  7487.  
  7488.  USAGE
  7489.   Int_Type strbytelen (String_Type s)
  7490.  
  7491.  DESCRIPTION
  7492.   This function returns the number of bytes in a string.  In UTF-8
  7493.   mode, this value is generally different from the number of
  7494.   characters in a string.  For the latter information, the
  7495.   `strlen' or `strcharlen' functions should be used.
  7496.  
  7497.  SEE ALSO
  7498.   strlen, strcharlen, length
  7499.  
  7500. --------------------------------------------------------------
  7501.  
  7502. strbytesub
  7503.  
  7504.  SYNOPSIS
  7505.   Replace a byte with another in a string.
  7506.  
  7507.  USAGE
  7508.   String_Type strsub (String_Type s, Int_Type pos, UChar_Type b)
  7509.  
  7510.  DESCRIPTION
  7511.   The `strbytesub' function may be be used to substitute the byte
  7512.   `b' for the byte at byte position `pos' of the string
  7513.   `s'.  The resulting string is returned.
  7514.  
  7515.  NOTES
  7516.   The first byte in the string `s' is specified by `pos'
  7517.   equal to 1.  This function uses byte semantics, not character
  7518.   semantics.
  7519.  
  7520.  SEE ALSO
  7521.   strsub, is_substr, strreplace, strbytelen
  7522.  
  7523. --------------------------------------------------------------
  7524.  
  7525. strcat
  7526.  
  7527.  SYNOPSIS
  7528.   Concatenate strings
  7529.  
  7530.  USAGE
  7531.   String_Type strcat (String_Type a_1, ...,  String_Type a_N)
  7532.  
  7533.  DESCRIPTION
  7534.    The `strcat' function concatenates its N string
  7535.    arguments `a_1', ... `a_N' together and returns the result.
  7536.  
  7537.  EXAMPLE
  7538.  
  7539.     strcat ("Hello", " ", "World");
  7540.  
  7541.    produces the string `"Hello World"'.
  7542.  
  7543.  NOTES
  7544.    This function is equivalent to the binary operation `a_1+...+a_N'.
  7545.    However, `strcat' is much faster making it the preferred method
  7546.    to concatenate strings.
  7547.  
  7548.  SEE ALSO
  7549.   sprintf, strjoin
  7550.  
  7551. --------------------------------------------------------------
  7552.  
  7553. strcharlen
  7554.  
  7555.  SYNOPSIS
  7556.   Get the number of characters in a string including combining characters
  7557.  
  7558.  USAGE
  7559.   Int_Type strcharlen (String_Type s)
  7560.  
  7561.  DESCRIPTION
  7562.   The `strcharlen' function returns the number of characters in a
  7563.   string.  If the string contains combining characters, then they are
  7564.   also counted.  Use the `strlen' function to obtain the
  7565.   character count ignoring combining characters.
  7566.  
  7567.  SEE ALSO
  7568.   strlen, strbytelen
  7569.  
  7570. --------------------------------------------------------------
  7571.  
  7572. strchop
  7573.  
  7574.  SYNOPSIS
  7575.   Chop or split a string into substrings.
  7576.  
  7577.  USAGE
  7578.   String_Type[] strchop (String_Type str, Int_Type delim, Int_Type quote)
  7579.  
  7580.  DESCRIPTION
  7581.    The `strchop' function may be used to split-up a string
  7582.    `str' that consists of substrings delimited by the character
  7583.    specified by `delim'.  If the integer `quote' is non-zero,
  7584.    it will be taken as a quote character for the delimiter.  The
  7585.    function returns the substrings as an array.
  7586.  
  7587.  EXAMPLE
  7588.    The following function illustrates how to sort a comma separated
  7589.    list of strings:
  7590.  
  7591.      define sort_string_list (a)
  7592.      {
  7593.         variable i, b, c;
  7594.         b = strchop (a, ',', 0);
  7595.  
  7596.         i = array_sort (b);
  7597.         b = b[i];   % rearrange
  7598.  
  7599.         % Convert array back into comma separated form
  7600.         return strjoin (b, ",");
  7601.      }
  7602.  
  7603.  
  7604.  SEE ALSO
  7605.   strchopr, strjoin, strtok
  7606.  
  7607. --------------------------------------------------------------
  7608.  
  7609. strchopr
  7610.  
  7611.  SYNOPSIS
  7612.   Chop or split a string into substrings.
  7613.  
  7614.  USAGE
  7615.   String_Type[] strchopr (String_Type str, String_Type delim, String_Type quote)
  7616.  
  7617.  DESCRIPTION
  7618.   This routine performs exactly the same function as `strchop' except
  7619.   that it returns the substrings in the reverse order.  See the
  7620.   documentation for `strchop' for more information.
  7621.  
  7622.  SEE ALSO
  7623.   strchop, strtok, strjoin
  7624.  
  7625. --------------------------------------------------------------
  7626.  
  7627. strcmp
  7628.  
  7629.  SYNOPSIS
  7630.   Compare two strings
  7631.  
  7632.  USAGE
  7633.   Int_Type strcmp (String_Type a, String_Type b)
  7634.  
  7635.  DESCRIPTION
  7636.    The `strcmp' function may be used to perform a case-sensitive
  7637.    string comparison, in the lexicographic sense, on strings `a' and
  7638.    `b'.  It returns 0 if the strings are identical, a negative integer
  7639.    if `a' is less than `b', or a positive integer if `a' is greater
  7640.    than `b'.
  7641.  
  7642.  EXAMPLE
  7643.    The `strup' function may be used to perform a case-insensitive
  7644.    string comparison:
  7645.  
  7646.     define case_insensitive_strcmp (a, b)
  7647.     {
  7648.       return strcmp (strup(a), strup(b));
  7649.     }
  7650.  
  7651.  
  7652.  NOTES
  7653.    One may also use one of the binary comparison operators, e.g.,
  7654.    `a > b'.
  7655.  
  7656.  SEE ALSO
  7657.   strup, strncmp
  7658.  
  7659. --------------------------------------------------------------
  7660.  
  7661. strcompress
  7662.  
  7663.  SYNOPSIS
  7664.   Remove excess whitespace characters from a string
  7665.  
  7666.  USAGE
  7667.   String_Type strcompress (String_Type s, String_Type white)
  7668.  
  7669.  DESCRIPTION
  7670.   The `strcompress' function compresses the string `s' by
  7671.   replacing a sequence of one or more characters from the set
  7672.   `white' by the first character of `white'. In addition, it
  7673.   also removes all leading and trailing characters from `s' that
  7674.   are part of `white'.
  7675.  
  7676.  EXAMPLE
  7677.   The expression
  7678.  
  7679.     strcompress (",;apple,,cherry;,banana", ",;");
  7680.  
  7681.   returns the string `"apple,cherry,banana"'.
  7682.  
  7683.  SEE ALSO
  7684.   strtrim, strtrans, str_delete_chars
  7685.  
  7686. --------------------------------------------------------------
  7687.  
  7688. string_match
  7689.  
  7690.  SYNOPSIS
  7691.   Match a string against a regular expression
  7692.  
  7693.  USAGE
  7694.   Int_Type string_match(String_Type str, String_Type pat, Int_Type nth)
  7695.  
  7696.  DESCRIPTION
  7697.   The `string_match' function returns zero if `str' does not
  7698.   match regular expression specified by `pat'.  This function
  7699.   performs the match starting at the `nth' byte in the string
  7700.   `str' (numbered from 1).  This function returns the position in
  7701.   bytes (numbered from 1) of the start of the match in `str'.
  7702.   The exact substring matched may be found using
  7703.   `string_match_nth'.
  7704.  
  7705.  NOTES
  7706.   Positions in the string are specified using byte-offsets not
  7707.   character offsets. The value returned by this function is measured
  7708.   from the beginning of the string `str'.
  7709.  
  7710.   The function is not yet UTF-8 aware.  If possible, consider using
  7711.   the `pcre' module for better, more sophisticated regular
  7712.   expressions.
  7713.  
  7714.  SEE ALSO
  7715.   string_match_nth, strcmp, strncmp
  7716.  
  7717. --------------------------------------------------------------
  7718.  
  7719. string_match_nth
  7720.  
  7721.  SYNOPSIS
  7722.   Get the result of the last call to string_match
  7723.  
  7724.  USAGE
  7725.   (Int_Type pos, Int_Type len) = string_match_nth(Int_Type nth)
  7726.  
  7727.  DESCRIPTION
  7728.   The `string_match_nth' function returns two integers describing
  7729.   the result of the last call to `string_match'.  It returns both
  7730.   the zero-based byte-position of the `nth' submatch and
  7731.   the length of the match.
  7732.  
  7733.   By convention, `nth' equal to zero means the entire match.
  7734.   Otherwise, `nth' must be an integer with a value 1 through 9,
  7735.   and refers to the set of characters matched by the `nth' regular
  7736.   expression enclosed by the pairs `\(, \)'.
  7737.  
  7738.  EXAMPLE
  7739.   Consider:
  7740.  
  7741.      variable matched, pos, len;
  7742.      matched = string_match("hello world", "\([a-z]+\) \([a-z]+\)"R, 1);
  7743.      if (matched)
  7744.        (pos, len) = string_match_nth(2);
  7745.  
  7746.   This will set `matched' to 1 since a match will be found at the
  7747.   first byte position, `pos' to 6 since `w' is offset 6 bytes
  7748.   from the beginning of the string, and `len' to 5 since
  7749.   `"world"' is 5 bytes long.
  7750.  
  7751.  NOTES
  7752.   The position offset is _not_ affected by the value of the offset
  7753.   parameter to the `string_match' function. For example, if the
  7754.   value of the last parameter to the `string_match' function had
  7755.   been 3, `pos' would still have been set to 6.
  7756.  
  7757.  SEE ALSO
  7758.   string_match
  7759.  
  7760. --------------------------------------------------------------
  7761.  
  7762. strjoin
  7763.  
  7764.  SYNOPSIS
  7765.   Concatenate elements of a string array
  7766.  
  7767.  USAGE
  7768.   String_Type strjoin (Array_Type a, String_Type delim)
  7769.  
  7770.  DESCRIPTION
  7771.    The `strjoin' function operates on an array of strings by joining
  7772.    successive elements together separated with a delimiter `delim'.
  7773.    If `delim' is the empty string `""', then the result will
  7774.    simply be the concatenation of the elements.
  7775.  
  7776.  EXAMPLE
  7777.    Suppose that
  7778.  
  7779.       days = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
  7780.  
  7781.    Then `strjoin (days,"+")' will produce
  7782.    `"Sun+Mon+Tue+Wed+Thu+Fri+Sat+Sun"'.  Similarly,
  7783.    `strjoin (["","",""], "X")' will produce `"XX"'.
  7784.  
  7785.  SEE ALSO
  7786.   strchop, strcat
  7787.  
  7788. --------------------------------------------------------------
  7789.  
  7790. strlen
  7791.  
  7792.  SYNOPSIS
  7793.   Compute the length of a string
  7794.  
  7795.  USAGE
  7796.   Int_Type strlen (String_Type a)
  7797.  
  7798.  DESCRIPTION
  7799.    The `strlen' function may be used to compute the character
  7800.    length of a string ignoring the presence of combining characters.
  7801.    The `strcharlen' function may be used to count combining
  7802.    characters as distinct characters.  For byte-semantics, use the
  7803.    `strbytelen' function.
  7804.  
  7805.  EXAMPLE
  7806.    After execution of
  7807.  
  7808.    variable len = strlen ("hello");
  7809.  
  7810.    `len' will have a value of `5'.
  7811.  
  7812.  SEE ALSO
  7813.   strbytelen, strcharlen, bstrlen, length, substr
  7814.  
  7815. --------------------------------------------------------------
  7816.  
  7817. strlow
  7818.  
  7819.  SYNOPSIS
  7820.   Convert a string to lowercase
  7821.  
  7822.  USAGE
  7823.   String_Type strlow (String_Type s)
  7824.  
  7825.  DESCRIPTION
  7826.   The `strlow' function takes a string `s' and returns another
  7827.   string identical to `s' except that all upper case characters
  7828.   that are contained in `s' are converted converted to lower case.
  7829.  
  7830.  EXAMPLE
  7831.   The function
  7832.  
  7833.     define Strcmp (a, b)
  7834.     {
  7835.       return strcmp (strlow (a), strlow (b));
  7836.     }
  7837.  
  7838.   performs a case-insensitive comparison operation of two strings by
  7839.   converting them to lower case first.
  7840.  
  7841.  SEE ALSO
  7842.   strup, tolower, strcmp, strtrim, define_case
  7843.  
  7844. --------------------------------------------------------------
  7845.  
  7846. strnbytecmp
  7847.  
  7848.  SYNOPSIS
  7849.   Compare the first n bytes of two strings
  7850.  
  7851.  USAGE
  7852.   Int_Type strnbytecmp (String_Type a, String_Type b, Int_Type n)
  7853.  
  7854.  DESCRIPTION
  7855.   This function compares the first `n' bytes of the strings
  7856.   `a' and `b'.  See the documentation for `strcmp' for
  7857.   information about the return value.
  7858.  
  7859.  SEE ALSO
  7860.   strncmp, strncharcmp, strcmp
  7861.  
  7862. --------------------------------------------------------------
  7863.  
  7864. strncharcmp
  7865.  
  7866.  SYNOPSIS
  7867.   Compare the first n characters of two strings
  7868.  
  7869.  USAGE
  7870.   Int_Type strncharcmp (String_Type a, String_Type b, Int_Type n)
  7871.  
  7872.  DESCRIPTION
  7873.   This function compares the first `n' characters of the strings
  7874.   `a' and `b' counting combining characters as distinct
  7875.   characters.  See the documentation for `strcmp' for information
  7876.   about the return value.
  7877.  
  7878.  SEE ALSO
  7879.   strncmp, strnbytecmp, strcmp
  7880.  
  7881. --------------------------------------------------------------
  7882.  
  7883. strncmp
  7884.  
  7885.  SYNOPSIS
  7886.   Compare the first few characters of two strings
  7887.  
  7888.  USAGE
  7889.   Int_Type strncmp (String_Type a, String_Type b, Int_Type n)
  7890.  
  7891.  DESCRIPTION
  7892.   This function behaves like `strcmp' except that it compares only the
  7893.   first `n' characters in the strings `a' and `b'.
  7894.   See the documentation for `strcmp' for information about the return
  7895.   value.
  7896.  
  7897.   In counting characters, combining characters are not counted,
  7898.   although they are used in the comparison.  Use the
  7899.   `strncharcmp' function if you want combining characters to be
  7900.   included in the character count.  The `strnbytecmp' function
  7901.   should be used to compare bytes.
  7902.  
  7903.  EXAMPLE
  7904.   The expression
  7905.  
  7906.      strcmp ("apple", "appliance", 3);
  7907.  
  7908.   will return zero since the first three characters match.
  7909.  
  7910.  NOTES
  7911.   This function uses character semantics.
  7912.  
  7913.  SEE ALSO
  7914.   strcmp, strlen, strncharcmp, strnbytecmp
  7915.  
  7916. --------------------------------------------------------------
  7917.  
  7918. strreplace
  7919.  
  7920.  SYNOPSIS
  7921.   Replace one or more substrings
  7922.  
  7923.  USAGE
  7924.   (new, n) = strreplace (a, b, c, max_n)
  7925.  
  7926.    String_Type a, b, c, rep;
  7927.    Int_Type n, max_n;
  7928.  
  7929.  
  7930.  DESCRIPTION
  7931.   The `strreplace' function may be used to replace one or more
  7932.   occurrences of `b' in `a' with `c'.  If the integer
  7933.   `max_n' is positive, then the first `max_n' occurrences of
  7934.   `b' in `a' will be replaced.  Otherwise, if `max_n' is
  7935.   negative, then the last `abs(max_n)' occurrences will be replaced.
  7936.  
  7937.   The function returns the resulting string and an integer indicating
  7938.   how many replacements were made.
  7939.  
  7940.  EXAMPLE
  7941.   The following function illustrates how `strreplace' may be used
  7942.   to remove all occurrences of a specified substring:
  7943.  
  7944.      define delete_substrings (a, b)
  7945.      {
  7946.         (a, ) = strreplace (a, b, "", strlen (a));
  7947.         return a;
  7948.      }
  7949.  
  7950.  
  7951.  SEE ALSO
  7952.   is_substr, strsub, strtrim, strtrans, str_delete_chars
  7953.  
  7954. --------------------------------------------------------------
  7955.  
  7956. strsub
  7957.  
  7958.  SYNOPSIS
  7959.   Replace a character with another in a string.
  7960.  
  7961.  USAGE
  7962.   String_Type strsub (String_Type s, Int_Type pos, Int_Type ch)
  7963.  
  7964.  DESCRIPTION
  7965.   The `strsub' function may be used to substitute the character
  7966.   `ch' for the character at character position `pos' of the string
  7967.   `s'.  The resulting string is returned.
  7968.  
  7969.  EXAMPLE
  7970.  
  7971.     define replace_spaces_with_comma (s)
  7972.     {
  7973.       variable n;
  7974.       while (n = is_substr (s, " "), n) s = strsub (s, n, ',');
  7975.       return s;
  7976.     }
  7977.  
  7978.   For uses such as this, the `strtrans' function is a better choice.
  7979.  
  7980.  NOTES
  7981.   The first character in the string `s' is specified by `pos'
  7982.   equal to 1.  This function uses character semantics, not byte
  7983.   semantics.
  7984.  
  7985.  SEE ALSO
  7986.   is_substr, strreplace, strlen
  7987.  
  7988. --------------------------------------------------------------
  7989.  
  7990. strtok
  7991.  
  7992.  SYNOPSIS
  7993.   Extract tokens from a string
  7994.  
  7995.  USAGE
  7996.   String_Type[] strtok (String_Type str [,String_Type white])
  7997.  
  7998.  DESCRIPTION
  7999.   `strtok' breaks the string `str' into a series of tokens
  8000.   and returns them as an array of strings.  If the second parameter
  8001.   `white' is present, then it specifies the set of characters
  8002.   that are to be regarded as whitespace when extracting the tokens,
  8003.   and may consist of the whitespace characters or a range of such
  8004.   characters. If the first character of `white' is `'^'',
  8005.   then the whitespace characters consist of all characters except
  8006.   those in `white'.  For example, if `white' is `"
  8007.   \t\n,;."', then those characters specify the whitespace
  8008.   characters.  However, if `white' is given by
  8009.   `"^a-zA-Z0-9_"', then any character is a whitespace character
  8010.   except those in the ranges `a-z', `A-Z', `0-9', and
  8011.   the underscore character.  To specify the hyphen character as a
  8012.   whitespace character, then it should be the first character of the
  8013.   whitespace string.  In addition to ranges, the whitespace specifier
  8014.   may also include character classes:
  8015.  
  8016.     \w matches a unicode "word" character, taken to be alphanumeric.
  8017.     \a alphabetic character, excluding digits
  8018.     \s matches whitespace
  8019.     \l matches lowercase
  8020.     \u matches uppercase
  8021.     \d matches a digit
  8022.     \\ matches a backslash
  8023.     \^ matches a ^ character
  8024.  
  8025.  
  8026.   If the second parameter is not present, then it defaults to
  8027.   `"\s"'.
  8028.  
  8029.  EXAMPLE
  8030.   The following example may be used to count the words in a text file:
  8031.  
  8032.     define count_words (file)
  8033.     {
  8034.        variable fp, line, count;
  8035.  
  8036.        fp = fopen (file, "r");
  8037.        if (fp == NULL) return -1;
  8038.  
  8039.        count = 0;
  8040.        while (-1 != fgets (&line, fp))
  8041.          {
  8042.            line = strtok (line, "^\\a");
  8043.            count += length (line);
  8044.          }
  8045.        () = fclose (fp);
  8046.        return count;
  8047.     }
  8048.  
  8049.   Here a word was assumed to consist only of alphabetic characters.
  8050.  
  8051.  SEE ALSO
  8052.   strchop, strcompress, strjoin
  8053.  
  8054. --------------------------------------------------------------
  8055.  
  8056. strtrans
  8057.  
  8058.  SYNOPSIS
  8059.   Replace characters in a string
  8060.  
  8061.  USAGE
  8062.   String_Type strtrans (str, old_set, new_set)
  8063.  
  8064.    String_Type str, old_set, new_set;
  8065.  
  8066.  
  8067.  DESCRIPTION
  8068.   The `strtrans' function may be used to replace all the characters
  8069.   from the set `old_set' with the corresponding characters from
  8070.   `new_set' in the string `str'.  If `new_set' is empty,
  8071.   then the characters in `old_set' will be removed from `str'.
  8072.  
  8073.   If `new_set' is not empty, then `old_set' and
  8074.   `new_set' must be commensurate.  Each set may consist of
  8075.   character ranges such as `A-Z' and character classes:
  8076.  
  8077.     \w matches a unicode "word" character, taken to be alphanumeric.
  8078.     \a alphabetic character, excluding digits
  8079.     \s matches whitespace
  8080.     \l matches lowercase
  8081.     \u matches uppercase
  8082.     \d matches a digit
  8083.     \\ matches a backslash
  8084.     \^ matches a ^ character
  8085.  
  8086.   If the first character of a set is `^' then the set is taken to
  8087.   be the complement set.
  8088.  
  8089.  EXAMPLE
  8090.  
  8091.     str = strtrans (str, "\\u", "\\l");   % lower-case str
  8092.     str = strtrans (str, "^0-9", " ");    % Replace anything but 0-9 by space
  8093.     str = strtrans (str, "\\^0-9", " ");  % Replace '^' and 0-9 by a space
  8094.  
  8095.  
  8096.  SEE ALSO
  8097.   strreplace, strtrim, strup, strlow
  8098.  
  8099. --------------------------------------------------------------
  8100.  
  8101. strtrim
  8102.  
  8103.  SYNOPSIS
  8104.   Remove whitespace from the ends of a string
  8105.  
  8106.  USAGE
  8107.   String_Type strtrim (String_Type s [,String_Type w])
  8108.  
  8109.  DESCRIPTION
  8110.   The `strtrim' function removes all leading and trailing whitespace
  8111.   characters from the string `s' and returns the result.  The
  8112.   optional second parameter specifies the set of whitespace
  8113.   characters.  If the argument is not present, then the set defaults
  8114.   to `"\s"'.  The whitespace specification may consist of
  8115.   character ranges such as `A-Z' and character classes:
  8116.  
  8117.     \w matches a unicode "word" character, taken to be alphanumeric.
  8118.     \a alphabetic character, excluding digits
  8119.     \s matches whitespace
  8120.     \l matches lowercase
  8121.     \u matches uppercase
  8122.     \d matches a digit
  8123.     \\ matches a backslash
  8124.     \^ matches a ^ character
  8125.  
  8126.   If the first character of a set is `^' then the set is taken to
  8127.   be the complement set.
  8128.  
  8129.  SEE ALSO
  8130.   strtrim_beg, strtrim_end, strcompress
  8131.  
  8132. --------------------------------------------------------------
  8133.  
  8134. strtrim_beg
  8135.  
  8136.  SYNOPSIS
  8137.   Remove leading whitespace from a string
  8138.  
  8139.  USAGE
  8140.   String_Type strtrim_beg (String_Type s [,String_Type w])
  8141.  
  8142.  DESCRIPTION
  8143.   The `strtrim_beg' function removes all leading whitespace
  8144.   characters from the string `s' and returns the result.
  8145.   The optional second parameter specifies the set of whitespace
  8146.   characters.  See the documentation for the `strtrim' function
  8147.   form more information about the whitespace parameter.
  8148.  
  8149.  SEE ALSO
  8150.   strtrim, strtrim_end, strcompress
  8151.  
  8152. --------------------------------------------------------------
  8153.  
  8154. strtrim_end
  8155.  
  8156.  SYNOPSIS
  8157.   Remove trailing whitespace from a string
  8158.  
  8159.  USAGE
  8160.   String_Type strtrim_end (String_Type s [,String_Type w])
  8161.  
  8162.  DESCRIPTION
  8163.   The `strtrim_end' function removes all trailing whitespace
  8164.   characters from the string `s' and returns the result.  The
  8165.   optional second parameter specifies the set of whitespace
  8166.   characters.  See the documentation for the `strtrim' function
  8167.   form more information about the whitespace parameter.
  8168.  
  8169.  SEE ALSO
  8170.   strtrim, strtrim_beg, strcompress
  8171.  
  8172. --------------------------------------------------------------
  8173.  
  8174. strup
  8175.  
  8176.  SYNOPSIS
  8177.   Convert a string to uppercase
  8178.  
  8179.  USAGE
  8180.   String_Type strup (String_Type s)
  8181.  
  8182.  DESCRIPTION
  8183.   The `strup' function takes a string `s' and returns another
  8184.   string identical to `s' except that all lower case characters
  8185.   that contained in `s' are converted to upper case.
  8186.  
  8187.  EXAMPLE
  8188.   The function
  8189.  
  8190.     define Strcmp (a, b)
  8191.     {
  8192.       return strcmp (strup (a), strup (b));
  8193.     }
  8194.  
  8195.   performs a case-insensitive comparison operation of two strings by
  8196.   converting them to upper case first.
  8197.  
  8198.  SEE ALSO
  8199.   strlow, toupper, strcmp, strtrim, define_case, strtrans
  8200.  
  8201. --------------------------------------------------------------
  8202.  
  8203. str_delete_chars
  8204.  
  8205.  SYNOPSIS
  8206.   Delete characters from a string
  8207.  
  8208.  USAGE
  8209.   String_Type str_delete_chars (String_Type str, String_Type del_set
  8210.  
  8211.  DESCRIPTION
  8212.   This function may be used to delete the set of characters specified
  8213.   by `del_set' from the string `str'.  The result is returned.
  8214.  
  8215.   The set of characters to be deleted may include ranges such as
  8216.   `A-Z' and characters classes:
  8217.  
  8218.     \w matches a unicode "word" character, taken to be alphanumeric.
  8219.     \a alphabetic character, excluding digits
  8220.     \s matches whitespace
  8221.     \l matches lowercase
  8222.     \u matches uppercase
  8223.     \d matches a digit
  8224.     \\ matches a backslash
  8225.     \^ matches a ^ character
  8226.  
  8227.   If the first character of `del_set' is `^', then the set
  8228.   is taken to be the complement of the remaining string.
  8229.  
  8230.  EXAMPLE
  8231.  
  8232.     str = str_delete_chars (str, "^A-Za-z");
  8233.  
  8234.   will remove all characters except `A-Z' and `a-z' from
  8235.   `str'.  Similarly,
  8236.  
  8237.     str = str_delete_chars (str, "^\\a");
  8238.  
  8239.   will remove all but the alphabetic characters.
  8240.  
  8241.  SEE ALSO
  8242.   strtrans, strreplace, strcompress
  8243.  
  8244. --------------------------------------------------------------
  8245.  
  8246. str_quote_string
  8247.  
  8248.  SYNOPSIS
  8249.   Escape characters in a string.
  8250.  
  8251.  USAGE
  8252.   String_Type str_quote_string(String_Type str, String_Type qlis, Int_Type quote)
  8253.  
  8254.  DESCRIPTION
  8255.   The `str_quote_string' returns a string identical to `str'
  8256.   except that all characters contained in the string `qlis' are
  8257.   escaped with the `quote' character, including the quote
  8258.   character itself.  This function is useful for making a string that
  8259.   can be used in a regular expression.
  8260.  
  8261.  EXAMPLE
  8262.   Execution of the statements
  8263.  
  8264.    node = "Is it [the coat] really worth $100?";
  8265.    tag = str_quote_string (node, "\\^$[]*.+?", '\\');
  8266.  
  8267.   will result in `tag' having the value:
  8268.  
  8269.     Is it \[the coat\] really worth \$100\?
  8270.  
  8271.  
  8272.  SEE ALSO
  8273.   str_uncomment_string, make_printable_string
  8274.  
  8275. --------------------------------------------------------------
  8276.  
  8277. str_replace
  8278.  
  8279.  SYNOPSIS
  8280.   Replace a substring of a string (deprecated)
  8281.  
  8282.  USAGE
  8283.   Int_Type str_replace (String_Type a, String_Type b, String_Type c)
  8284.  
  8285.  DESCRIPTION
  8286.   The `str_replace' function replaces the first occurrence of `b' in
  8287.   `a' with `c' and returns an integer that indicates whether a
  8288.   replacement was made.  If `b' does not occur in `a', zero is
  8289.   returned.  However, if `b' occurs in `a', a non-zero integer is
  8290.   returned as well as the new string resulting from the replacement.
  8291.  
  8292.  NOTES
  8293.   This function has been superceded by `strreplace'.  It should no
  8294.   longer be used.
  8295.  
  8296.  SEE ALSO
  8297.   strreplace
  8298.  
  8299. --------------------------------------------------------------
  8300.  
  8301. str_uncomment_string
  8302.  
  8303.  SYNOPSIS
  8304.   Remove comments from a string
  8305.  
  8306.  USAGE
  8307.   String_Type str_uncomment_string(String_Type s, String_Type beg, String_Type end)
  8308.  
  8309.  DESCRIPTION
  8310.   This function may be used to remove simple forms of comments from a
  8311.   string `s'. The parameters, `beg' and `end', are strings
  8312.   of equal length whose corresponding characters specify the begin and
  8313.   end comment characters, respectively.  It returns the uncommented
  8314.   string.
  8315.  
  8316.  EXAMPLE
  8317.   The expression
  8318.  
  8319.      str_uncomment_string ("Hello (testing) 'example' World", "'(", "')")
  8320.  
  8321.   returns the string `"Hello   World"'.
  8322.  
  8323.  NOTES
  8324.   This routine does not handle multicharacter comment delimiters and it
  8325.   assumes that comments are not nested.
  8326.  
  8327.  SEE ALSO
  8328.   str_quote_string, str_delete_chars, strtrans
  8329.  
  8330. --------------------------------------------------------------
  8331.  
  8332. substr
  8333.  
  8334.  SYNOPSIS
  8335.   Extract a substring from a string
  8336.  
  8337.  USAGE
  8338.   String_Type substr (String_Type s, Int_Type n, Int_Type len)
  8339.  
  8340.  DESCRIPTION
  8341.   The `substr' function returns a substring with character length
  8342.   `len' of the string `s' beginning at the character position
  8343.   `n'.  If `len' is `-1', the entire length of the string
  8344.   `s' will be used for `len'.  The first character of `s'
  8345.   is given by `n' equal to 1.
  8346.  
  8347.  EXAMPLE
  8348.  
  8349.      substr ("To be or not to be", 7, 5);
  8350.  
  8351.   returns `"or no"'
  8352.  
  8353.  NOTES
  8354.   In many cases it is more convenient to use array indexing rather
  8355.   than the `substr' function.  In fact, if UTF-8 mode is not in
  8356.   effect, `substr(s,i+1,strlen(s))' is equivalent to
  8357.   `s[[i:]]'.  Array indexing uses byte-semantics, not character
  8358.   semantics assumed by the `substr' function.
  8359.  
  8360.  SEE ALSO
  8361.   is_substr, substrbytes, strlen
  8362.  
  8363. --------------------------------------------------------------
  8364.  
  8365. substrbytes
  8366.  
  8367.  SYNOPSIS
  8368.   Extract a byte sequence from a string
  8369.  
  8370.  USAGE
  8371.   String_Type substrbytes (String_Type s, Int_Type n, Int_Type len)
  8372.  
  8373.  DESCRIPTION
  8374.   The `substrbytes' function returns a substring with byte length
  8375.   `len' of the string `s' beginning at the byte position
  8376.   `n', counting from 1.  If `len' is `-1', the entire
  8377.   byte-length of the string `s' will be used for `len'.  The first
  8378.   byte of `s' is given by `n' equal to 1.
  8379.  
  8380.  EXAMPLE
  8381.  
  8382.      substrbytes ("To be or not to be", 7, 5);
  8383.  
  8384.   returns `"or no"'
  8385.  
  8386.  NOTES
  8387.   In many cases it is more convenient to use array indexing rather
  8388.   than the `substr' function.  In fact
  8389.   `substrbytes(s,i+1,-1)' is equivalent to
  8390.   `s[[i:]]'.
  8391.  
  8392.   The function `substr' may be used if character semantics are
  8393.   desired.
  8394.  
  8395.  SEE ALSO
  8396.   substr, strbytelen
  8397.  
  8398. --------------------------------------------------------------
  8399.  
  8400. __add_binary
  8401.  
  8402.  SYNOPSIS
  8403.   Extend a binary operation to a user defined type
  8404.  
  8405.  USAGE
  8406.   __add_binary(op, return_type, binary_funct, lhs_type, rhs_type)
  8407.  
  8408.    String_Type op;
  8409.    Ref_Type binary_funct;
  8410.    DataType_Type return_type, lhs_type, rhs_type;
  8411.  
  8412.  
  8413.  DESCRIPTION
  8414.   The `__add_binary' function is used to specify a function to be
  8415.   called when a binary operation takes place between specified data
  8416.   types.  The first parameter indicates the binary operator and must
  8417.   be one of the following:
  8418.  
  8419.    "+", "-", "*", "/", "==", "!=", ">", ">=", "<", "<=", "^",
  8420.    "or", "and", "&", "|", "xor", "shl", "shr", "mod"
  8421.  
  8422.   The second parameter (`binary_funct') specifies the function to
  8423.   be called when the binary function takes place between the
  8424.   types `lhs_type' and `rhs_type'.  The `return_type'
  8425.   parameter stipulates the return values of the function and the data
  8426.   type of the result of the binary operation.
  8427.  
  8428.   The data type for `lhs_type' or `rhs_type' may be left
  8429.   unspecified by using Any_Type for either of these values.
  8430.   However, at least one of the parameters must correspond to a
  8431.   user-defined datatype.
  8432.  
  8433.  EXAMPLE
  8434.   This example defines a vector data type and extends the "*" operator
  8435.   to the new type:
  8436.  
  8437.     typedef struct { x, y, z } Vector_Type;
  8438.     define vector (x, y, z)
  8439.     {
  8440.        variable v = @Vector_Type;
  8441.        v.x = x;
  8442.        v.y = y;
  8443.        v.z = z;
  8444.        return v;
  8445.     }
  8446.     static define vector_scalar_mul (v, a)
  8447.     {
  8448.        return vector (a*v.x, a*v.y, a*v.z);
  8449.     }
  8450.     static define scalar_vector_mul (a, v)
  8451.     {
  8452.        return vector_scalar_mul (v, a);
  8453.     }
  8454.     static define dotprod (v1,v2)
  8455.     {
  8456.        return v1.x*v2.x + v1.y*v2.y + v1.z*v2.z;
  8457.     }
  8458.     __add_binary ("*", Vector_Type, &scalar_vector_mul, Any_Type, Vector_Type);
  8459.     __add_binary ("*", Vector_Type, &scalar_vector_mul, Any_Type, Vector_Type);
  8460.     __add_binary ("*", Double_Type, &dotprod, Vector_Type, Vector_Type);
  8461.  
  8462.  
  8463.  SEE ALSO
  8464.   __add_unary, __add_string, __add_destroy
  8465.  
  8466. --------------------------------------------------------------
  8467.  
  8468. __add_string
  8469.  
  8470.  SYNOPSIS
  8471.   Specify a string representation for a user-defined type
  8472.  
  8473.  USAGE
  8474.   __add_string (DataType_Type user_type, Ref_Type func)
  8475.  
  8476.  DESCRIPTION
  8477.   The `__add_string' function specifies a function to be called
  8478.   when a string representation is required for the specified
  8479.   user-defined datatype.
  8480.  
  8481.  EXAMPLE
  8482.   Consider the `Vector_Type' object defined in the example
  8483.   for the `__add_binary' function.
  8484.  
  8485.      static define vector_string (v)
  8486.      {
  8487.         return sprintf ("[%S,%S,%S]", v.x, v.y, v.z);
  8488.      }
  8489.      __add_string (Vector_Type, &vector_string);
  8490.  
  8491.   Then
  8492.  
  8493.      v = vector (3, 4, 5);
  8494.      vmessage ("v=%S", v);
  8495.  
  8496.   will generate the message:
  8497.  
  8498.      v=[3,4,5]
  8499.  
  8500.  
  8501.  SEE ALSO
  8502.   __add_unary, __add_binary, __add_destroy, __add_typecast
  8503.  
  8504. --------------------------------------------------------------
  8505.  
  8506. __add_typecast
  8507.  
  8508.  SYNOPSIS
  8509.   Add a typecast-function for a user-defined type
  8510.  
  8511.  USAGE
  8512.   __add_typecast (DataType_Type user_type, DataType_Type totype, Ref_Type func)
  8513.  
  8514.  DESCRIPTION
  8515.   The `__add_typecast' function specifies a function to be called
  8516.   to typecast the user-defined type to an object of type
  8517.   `totype'.  The function must be defined to take a single
  8518.   argument (the user-type to be converted) and must return an object
  8519.   of type `totype'.
  8520.  
  8521.  SEE ALSO
  8522.   __add_unary, __add_binary, __add_destroy, __add_string
  8523.  
  8524. --------------------------------------------------------------
  8525.  
  8526. __add_unary
  8527.  
  8528.  SYNOPSIS
  8529.   Extend a unary operator to a user-defined type
  8530.  
  8531.  USAGE
  8532.   __add_unary (op, return_type, unary_func, user_type)
  8533.  
  8534.    String_Type op;
  8535.    Ref_Type unary_func;
  8536.    DataType_Type return_type, user_type;
  8537.  
  8538.  
  8539.  DESCRIPTION
  8540.   The `__add_unary' function is used to define the action of an
  8541.   unary operation on a user-defined type.  The first parameter
  8542.   `op' must be a valid unary operator
  8543.  
  8544.    "-", "not", "~"
  8545.  
  8546.   or one of the following:
  8547.  
  8548.    "++", "--",
  8549.    "abs", "sign", "sqr", "mul2", "_ispos", "_isneg", "_isnonneg",
  8550.  
  8551.   The third parameter, `unary_func' specifies the function to be
  8552.   called to carry out the specified unary operation on the data type
  8553.   `user_type'.  The result of the operation is indicated by the
  8554.   value of the `return_type' parameter and must also be the
  8555.   return type of the unary function.
  8556.  
  8557.  EXAMPLE
  8558.   The example for the `__add_binary' function defined a
  8559.   `Vector_Type' object.  Here, the unary `"-"' and
  8560.   `"abs"' operators are
  8561.   extended to this type:
  8562.  
  8563.    static define vector_chs (v)
  8564.    {
  8565.       variable v1 = @Vector_Type;
  8566.       v1.x = -v.x;
  8567.       v1.y = -v.y;
  8568.       v1.z = -v.z;
  8569.       return v1;
  8570.    }
  8571.    static define vector_abs (v)
  8572.    {
  8573.       return sqrt (v.x*v.x + v.y*v.y + v.z*v.z);
  8574.    }
  8575.    __add_unary ("-", Vector_Type, &vector_chs, Vector_Type);
  8576.    __add_unary ("abs", Double_Type, &vector_abs, Vector_Type);
  8577.  
  8578.  
  8579.  SEE ALSO
  8580.   __add_binary, __add_string, __add_destroy
  8581.  
  8582. --------------------------------------------------------------
  8583.  
  8584. get_struct_field
  8585.  
  8586.  SYNOPSIS
  8587.   Get the value associated with a structure field
  8588.  
  8589.  USAGE
  8590.   x = get_struct_field (Struct_Type s, String field_name)
  8591.  
  8592.  DESCRIPTION
  8593.    The `get_struct_field' function gets the value of the field
  8594.    whose name is specified by `field_name' of the structure `s'.
  8595.  
  8596.  EXAMPLE
  8597.    The following example illustrates how this function may be used to
  8598.    to print the value of a structure.
  8599.  
  8600.       define print_struct (s)
  8601.       {
  8602.          variable name;
  8603.  
  8604.          foreach (get_struct_field_names (s))
  8605.            {
  8606.              name = ();
  8607.              value = get_struct_field (s, name);
  8608.              vmessage ("s.%s = %s\n", name, string(value));
  8609.            }
  8610.       }
  8611.  
  8612.  
  8613.  SEE ALSO
  8614.   set_struct_field, get_struct_field_names, array_info
  8615.  
  8616. --------------------------------------------------------------
  8617.  
  8618. get_struct_field_names
  8619.  
  8620.  SYNOPSIS
  8621.   Retrieve the field names associated with a structure
  8622.  
  8623.  USAGE
  8624.   String_Type[] = get_struct_field_names (Struct_Type s)
  8625.  
  8626.  DESCRIPTION
  8627.    The `get_struct_field_names' function returns an array of
  8628.    strings whose elements specify the names of the fields of the
  8629.    struct `s'.
  8630.  
  8631.  EXAMPLE
  8632.    The following example illustrates how the
  8633.    `get_struct_field_names' function may be used to print the
  8634.    value of a structure.
  8635.  
  8636.       define print_struct (s)
  8637.       {
  8638.          variable name, value;
  8639.  
  8640.          foreach (get_struct_field_names (s))
  8641.            {
  8642.              name = ();
  8643.              value = get_struct_field (s, name);
  8644.              vmessage ("s.%s = %s\n", name, string (value));
  8645.            }
  8646.       }
  8647.  
  8648.  
  8649.  SEE ALSO
  8650.   _push_struct_field_values, get_struct_field
  8651.  
  8652. --------------------------------------------------------------
  8653.  
  8654. is_struct_type
  8655.  
  8656.  SYNOPSIS
  8657.   Determine whether or not an object is a structure
  8658.  
  8659.  USAGE
  8660.   Integer_Type is_struct_type (X)
  8661.  
  8662.  DESCRIPTION
  8663.   The `is_struct_type' function returns 1 if the parameter
  8664.   refers to a structure or a user-defined type.  If the object is
  8665.   neither, 0 will be returned.
  8666.  
  8667.  SEE ALSO
  8668.   typeof, _typeof, _is_struct_type
  8669.  
  8670. --------------------------------------------------------------
  8671.  
  8672. _push_struct_field_values
  8673.  
  8674.  SYNOPSIS
  8675.   Push the values of a structure's fields onto the stack
  8676.  
  8677.  USAGE
  8678.   Integer_Type num = _push_struct_field_values (Struct_Type s)
  8679.  
  8680.  DESCRIPTION
  8681.   The `_push_struct_field_values' function pushes the values of
  8682.   all the fields of a structure onto the stack, returning the
  8683.   number of items pushed.  The fields are pushed such that the last
  8684.   field of the structure is pushed first.
  8685.  
  8686.  SEE ALSO
  8687.   get_struct_field_names, get_struct_field
  8688.  
  8689. --------------------------------------------------------------
  8690.  
  8691. set_struct_field
  8692.  
  8693.  SYNOPSIS
  8694.   Set the value associated with a structure field
  8695.  
  8696.  USAGE
  8697.   set_struct_field (s, field_name, field_value)
  8698.  
  8699.    Struct_Type s;
  8700.    String_Type field_name;
  8701.    Generic_Type field_value;
  8702.  
  8703.  
  8704.  DESCRIPTION
  8705.    The `set_struct_field' function sets the value of the field
  8706.    whose name is specified by `field_name' of the structure
  8707.    `s' to `field_value'.
  8708.  
  8709.  SEE ALSO
  8710.   get_struct_field, get_struct_field_names, set_struct_fields, array_info
  8711.  
  8712. --------------------------------------------------------------
  8713.  
  8714. set_struct_fields
  8715.  
  8716.  SYNOPSIS
  8717.   Set the fields of a structure
  8718.  
  8719.  USAGE
  8720.   set_struct_fields (Struct_Type s, ...)
  8721.  
  8722.  DESCRIPTION
  8723.   The `set_struct_fields' function may be used to set zero or more
  8724.   fields of a structure.  The fields are set in the order in which
  8725.   they were created when the structure was defined.
  8726.  
  8727.  EXAMPLE
  8728.  
  8729.     variable s = struct { name, age, height };
  8730.     set_struct_fields (s, "Bill", 13, 64);
  8731.  
  8732.  
  8733.  SEE ALSO
  8734.   set_struct_field, get_struct_field_names
  8735.  
  8736. --------------------------------------------------------------
  8737.  
  8738. ctime
  8739.  
  8740.  SYNOPSIS
  8741.   Convert a calendar time to a string
  8742.  
  8743.  USAGE
  8744.   String_Type ctime(Long_Type secs)
  8745.  
  8746.  DESCRIPTION
  8747.   This function returns a string representation of the time as given
  8748.   by `secs' seconds since 00:00:00 UTC, Jan 1, 1970.
  8749.  
  8750.  SEE ALSO
  8751.   time, strftime, _time, localtime, gmtime
  8752.  
  8753. --------------------------------------------------------------
  8754.  
  8755. gmtime
  8756.  
  8757.  SYNOPSIS
  8758.   Break down a time in seconds to the GMT timezone
  8759.  
  8760.  USAGE
  8761.   Struct_Type gmtime (Long_Type secs)
  8762.  
  8763.  DESCRIPTION
  8764.    The `gmtime' function is exactly like `localtime' except
  8765.    that the values in the structure it returns are with respect to GMT
  8766.    instead of the local timezone.  See the documentation for
  8767.    `localtime' for more information.
  8768.  
  8769.  NOTES
  8770.    On systems that do not support the `gmtime' C library function,
  8771.    this function is the same as `localtime'.
  8772.  
  8773.  SEE ALSO
  8774.   localtime, _time, mktime
  8775.  
  8776. --------------------------------------------------------------
  8777.  
  8778. localtime
  8779.  
  8780.  SYNOPSIS
  8781.   Break down a time in seconds to the local timezone
  8782.  
  8783.  USAGE
  8784.   Struct_Type localtime (Long_Type secs)
  8785.  
  8786.  DESCRIPTION
  8787.    The `localtime' function takes a parameter `secs'
  8788.    representing the number of seconds since 00:00:00, January 1 1970
  8789.    UTC and returns a structure containing information about `secs'
  8790.    in the local timezone.  The structure contains the following
  8791.    Int_Type fields:
  8792.  
  8793.    `tm_sec' The number of seconds after the minute, normally
  8794.       in the range 0 to 59, but can be up to 61 to allow for
  8795.       leap seconds.
  8796.  
  8797.    `tm_min' The number of minutes after the hour, in the
  8798.       range 0 to 59.
  8799.  
  8800.    `tm_hour' The number of hours past midnight, in the range
  8801.       0 to 23.
  8802.  
  8803.    `tm_mday' The day of the month, in the range 1 to 31.
  8804.  
  8805.    `tm_mon' The number of months since January, in the range
  8806.       0 to 11.
  8807.  
  8808.    `tm_year' The number of years since 1900.
  8809.  
  8810.    `tm_wday' The number of days since Sunday, in the range 0
  8811.       to 6.
  8812.  
  8813.    `tm_yday' The number of days since January 1, in the
  8814.       range 0 to 365.
  8815.  
  8816.    `tm_isdst' A flag that indicates whether daylight saving
  8817.       time is in effect at the time described.  The value is
  8818.       positive if daylight saving time is in effect, zero if it
  8819.       is not, and negative if the information is not available.
  8820.  
  8821.  SEE ALSO
  8822.   gmtime, _time, ctime, mktime
  8823.  
  8824. --------------------------------------------------------------
  8825.  
  8826. mktime
  8827.  
  8828.  SYNOPSIS
  8829.   Convert a time-structure to seconds
  8830.  
  8831.  USAGE
  8832.   secs = mktime (Struct_Type tm)
  8833.  
  8834.  DESCRIPTION
  8835.   The `mktime' function is essentially the inverse of the
  8836.   `localtime' function.  See the documentation for that function
  8837.   for more details.
  8838.  
  8839.  SEE ALSO
  8840.   localtime, gmtime, _time
  8841.  
  8842. --------------------------------------------------------------
  8843.  
  8844. strftime
  8845.  
  8846.  SYNOPSIS
  8847.   Format a date and time string
  8848.  
  8849.  USAGE
  8850.   str = strftime (String_Type format [,Struct_Type tm])
  8851.  
  8852.  DESCRIPTION
  8853.   The `strftime' creates a date and time string according to a
  8854.   specified format.  If called with a single argument, the current
  8855.   local time will be used as the reference time.  If called with two
  8856.   arguments, the second argument specifies the reference time, and
  8857.   must be a structure with the same fields as the structure returned
  8858.   by the `localtime' function.
  8859.  
  8860.   The format string may be composed of one or more of the following
  8861.   format descriptors:
  8862.  
  8863.        %A      full weekday name (Monday)
  8864.        %a      abbreviated weekday name (Mon)
  8865.        %B      full month name (January)
  8866.        %b      abbreviated month name (Jan)
  8867.        %c      standard date and time representation
  8868.        %d      day-of-month (01-31)
  8869.        %H      hour (24 hour clock) (00-23)
  8870.        %I      hour (12 hour clock) (01-12)
  8871.        %j      day-of-year (001-366)
  8872.        %M      minute (00-59)
  8873.        %m      month (01-12)
  8874.        %p      local equivalent of AM or PM
  8875.        %S      second (00-59)
  8876.        %U      week-of-year, first day sunday (00-53)
  8877.        %W      week-of-year, first day monday (00-53)
  8878.        %w      weekday (0-6, sunday is 0)
  8879.        %X      standard time representation
  8880.        %x      standard date representation
  8881.        %Y      year with century
  8882.        %y      year without century (00-99)
  8883.        %Z      timezone name
  8884.        %%      percent sign
  8885.  
  8886.  as well as any others provided by the C library.  The actual values
  8887.  represented by the format descriptors are locale-dependent.
  8888.  
  8889.  EXAMPLE
  8890.  
  8891.     message (strftime ("Today is %A, day %j of the year"));
  8892.     tm = localtime (0);
  8893.     message (strftime ("Unix time 0 was on a %A", tm));
  8894.  
  8895.  
  8896.  SEE ALSO
  8897.   localtime, time
  8898.  
  8899. --------------------------------------------------------------
  8900.  
  8901. _tic
  8902.  
  8903.  SYNOPSIS
  8904.   Reset the CPU timer
  8905.  
  8906.  USAGE
  8907.   _tic ()
  8908.  
  8909.  DESCRIPTION
  8910.   The `_tic' function resets the internal CPU timer.  The
  8911.  `_toc' may be used to read this timer.  See the documentation
  8912.  for the `_toc' function for more information.
  8913.  
  8914.  EXAMPLE
  8915.  
  8916.  SEE ALSO
  8917.   _toc, times, tic, toc
  8918.  
  8919. --------------------------------------------------------------
  8920.  
  8921. tic
  8922.  
  8923.  SYNOPSIS
  8924.   Reset the interval timer
  8925.  
  8926.  USAGE
  8927.   void tic ()
  8928.  
  8929.  DESCRIPTION
  8930.   The `tic' function resets the internal interval timer.  The
  8931.  `toc' may be used to read the interval timer.
  8932.  
  8933.  EXAMPLE
  8934.   The tic/toc functions may be used to measure execution times.  For
  8935.  example, at the `slsh' prompt, they may be used to measure the speed
  8936.  of a loop:
  8937.  
  8938.    slsh> tic; loop (500000); toc;
  8939.    0.06558
  8940.  
  8941.  
  8942.  NOTES
  8943.   On Unix, this timer makes use of the C library `gettimeofday'
  8944.   function.
  8945.  
  8946.  SEE ALSO
  8947.   toc, times
  8948.  
  8949. --------------------------------------------------------------
  8950.  
  8951. _time
  8952.  
  8953.  SYNOPSIS
  8954.   Get the current calendar time in seconds
  8955.  
  8956.  USAGE
  8957.   Long_Type _time ()
  8958.  
  8959.  DESCRIPTION
  8960.   The `_time' function returns the number of elapsed seconds since
  8961.   00:00:00 UTC, January 1, 1970.  A number of functions (`ctime',
  8962.   `gmtime', `localtime', etc.) are able to convert such a
  8963.   value to other representations.
  8964.  
  8965.  SEE ALSO
  8966.   ctime, time, localtime, gmtime
  8967.  
  8968. --------------------------------------------------------------
  8969.  
  8970. time
  8971.  
  8972.  SYNOPSIS
  8973.   Return the current date and time as a string
  8974.  
  8975.  USAGE
  8976.   String_Type time ()
  8977.  
  8978.  DESCRIPTION
  8979.   This function returns the current time as a string of the form:
  8980.  
  8981.     Sun Apr 21 13:34:17 1996
  8982.  
  8983.  
  8984.  SEE ALSO
  8985.   strftime, ctime, message, substr
  8986.  
  8987. --------------------------------------------------------------
  8988.  
  8989. times
  8990.  
  8991.  SYNOPSIS
  8992.   Get process times
  8993.  
  8994.  USAGE
  8995.   Struct_Type times ()
  8996.  
  8997.  DESCRIPTION
  8998.   The `times' function returns a structure containing the
  8999.   following fields:
  9000.  
  9001.     tms_utime     (user time)
  9002.     tms_stime     (system time)
  9003.     tms_cutime    (user time of child processes)
  9004.     tms_cstime    (system time of child processes)
  9005.  
  9006.  
  9007.  NOTES
  9008.   Not all systems support this function.
  9009.  
  9010.  SEE ALSO
  9011.   _tic, _toc, _time
  9012.  
  9013. --------------------------------------------------------------
  9014.  
  9015. _toc
  9016.  
  9017.  SYNOPSIS
  9018.   Get the elapsed CPU time for the current process
  9019.  
  9020.  USAGE
  9021.   Double_Type _toc ()
  9022.  
  9023.  DESCRIPTION
  9024.   The `_toc' function returns the elapsed CPU time in seconds since
  9025.   the last call to `_tic'.  The CPU time is the amount of time the
  9026.   CPU spent running the code of the current process.
  9027.  
  9028.  EXAMPLE
  9029.  
  9030.  NOTES
  9031.   This function may not be available on all systems.
  9032.  
  9033.   The implementation of this function is based upon the `times'
  9034.   system call.  The precision of the clock is system dependent and may
  9035.   not be very accurate for small time intervals.  For this reason, the
  9036.   tic/toc functions may be more useful for small time-intervals.
  9037.  
  9038.  SEE ALSO
  9039.   _tic, _tic, _toc, times, _time
  9040.  
  9041. --------------------------------------------------------------
  9042.  
  9043. toc
  9044.  
  9045.  SYNOPSIS
  9046.   Read the interval timer
  9047.  
  9048.  USAGE
  9049.   Double_Type toc ()
  9050.  
  9051.  DESCRIPTION
  9052.   The `toc' function returns the elapsed time in seconds since
  9053.   the last call to `tic'.  See the documentation for the
  9054.  `tic' function for more information.
  9055.  
  9056.  SEE ALSO
  9057.   tic, _tic, _toc, times, _time
  9058.  
  9059. --------------------------------------------------------------
  9060.  
  9061. atof
  9062.  
  9063.  SYNOPSIS
  9064.   Convert a string to a double precision number
  9065.  
  9066.  USAGE
  9067.   Double_Type atof (String_Type s)
  9068.  
  9069.  DESCRIPTION
  9070.   This function converts a string `s' to a double precision value
  9071.   and returns the result.  It performs no error checking on the format
  9072.   of the string.  The function `_slang_guess_type' may be used to
  9073.   check the syntax of the string.
  9074.  
  9075.  EXAMPLE
  9076.  
  9077.      define error_checked_atof (s)
  9078.      {
  9079.         if (__is_datatype_numeric (_slang_guess_type (s)))
  9080.           return atof (s);
  9081.         throw InvalidParmError, "$s is not a double"$;
  9082.     }
  9083.  
  9084.  
  9085.  SEE ALSO
  9086.   typecast, double, _slang_guess_type
  9087.  
  9088. --------------------------------------------------------------
  9089.  
  9090. atoi
  9091.  
  9092.  SYNOPSIS
  9093.   Convert a string to an integer
  9094.  
  9095.  USAGE
  9096.   Int_Type atoi (String_Type str)
  9097.  
  9098.  DESCRIPTION
  9099.   The `atoi' function converts a string to an `Int_Type'
  9100.   using the standard C library function of the corresponding name.
  9101.  
  9102.  NOTES
  9103.   This function performs no syntax checking upon its argument.
  9104.  
  9105.  SEE ALSO
  9106.   integer, atol, atoll, atof, sscanf
  9107.  
  9108. --------------------------------------------------------------
  9109.  
  9110. atol
  9111.  
  9112.  SYNOPSIS
  9113.   Convert a string to an long integer
  9114.  
  9115.  USAGE
  9116.   Long_Type atol (String_Type str)
  9117.  
  9118.  DESCRIPTION
  9119.   The `atol' function converts a string to a `Long_Type'
  9120.   using the standard C library function of the corresponding name.
  9121.  
  9122.  NOTES
  9123.   This function performs no syntax checking upon its argument.
  9124.  
  9125.  SEE ALSO
  9126.   integer, atoi, atoll, atof, sscanf
  9127.  
  9128. --------------------------------------------------------------
  9129.  
  9130. atoll
  9131.  
  9132.  SYNOPSIS
  9133.   Convert a string to a long long
  9134.  
  9135.  USAGE
  9136.   LLong_Type atoll (String_Type str)
  9137.  
  9138.  DESCRIPTION
  9139.   The `atoll' function converts a string to a `LLong_Type'
  9140.   using the standard C library function of the corresponding name.
  9141.  
  9142.  NOTES
  9143.   This function performs no syntax checking upon its argument.  Not
  9144.   all platforms provide support for the long long data type.
  9145.  
  9146.  SEE ALSO
  9147.   integer, atoi, atol, atof, sscanf
  9148.  
  9149. --------------------------------------------------------------
  9150.  
  9151. char
  9152.  
  9153.  SYNOPSIS
  9154.   Convert a character code to a string
  9155.  
  9156.  USAGE
  9157.   String_Type char (Integer_Type c)
  9158.  
  9159.  DESCRIPTION
  9160.   The `char' function converts an integer character code (ascii)
  9161.   value `c' to a string of unit character length such that the
  9162.   first character of the string is `c'.  For example,
  9163.   `char('a')' returns the string `"a"'.
  9164.  
  9165.   If UTF-8 mode is in effect  (`_slang_utf8_ok' is non-zero), the
  9166.   resulting single character may be represented by several bytes.
  9167.  
  9168.   If the character code `c' is less than 0, then byte-semantics
  9169.   will be used with the resulting string consisting of a single byte
  9170.   whose value is that of `-c&0xFF'.
  9171.  
  9172.  NOTES
  9173.   A better name should have been chosen for this function.
  9174.  
  9175.  SEE ALSO
  9176.   integer, string, typedef, sprintf
  9177.  
  9178. --------------------------------------------------------------
  9179.  
  9180. define_case
  9181.  
  9182.  SYNOPSIS
  9183.   Define upper-lower case conversion
  9184.  
  9185.  USAGE
  9186.   define_case (Integer_Type ch_up, Integer_Type ch_low)
  9187.  
  9188.  DESCRIPTION
  9189.   This function defines an upper and lowercase relationship between two
  9190.   characters specified by the arguments.  This relationship is used by
  9191.   routines which perform uppercase and lowercase conversions.
  9192.   The first integer `ch_up' is the ascii value of the uppercase character
  9193.   and the second parameter `ch_low' is the ascii value of its
  9194.   lowercase counterpart.
  9195.  
  9196.  NOTES
  9197.   This function has no effect in UTF-8 mode.
  9198.  
  9199.  SEE ALSO
  9200.   strlow, strup
  9201.  
  9202. --------------------------------------------------------------
  9203.  
  9204. double
  9205.  
  9206.  SYNOPSIS
  9207.   Convert an object to double precision
  9208.  
  9209.  USAGE
  9210.   Double_Type double (x)
  9211.  
  9212.  DESCRIPTION
  9213.   The `double' function typecasts an object `x' to double
  9214.   precision.  For example, if `x' is an array of integers, an
  9215.   array of double types will be returned.  If an object cannot be
  9216.   converted to `Double_Type', a type-mismatch error will result.
  9217.  
  9218.  NOTES
  9219.   The `double' function is equivalent to the typecast operation
  9220.  
  9221.      typecast (x, Double_Type)
  9222.  
  9223.   To convert a string to a double precision number, use the `atof'
  9224.   function.
  9225.  
  9226.  SEE ALSO
  9227.   typecast, atof, int
  9228.  
  9229. --------------------------------------------------------------
  9230.  
  9231. int
  9232.  
  9233.  SYNOPSIS
  9234.   Typecast an object to an integer
  9235.  
  9236.  USAGE
  9237.   Int_Type int (s)
  9238.  
  9239.  DESCRIPTION
  9240.   This function performs a typecast of an object `s' to
  9241.   an object of Integer_Type.  If `s' is a string, it returns
  9242.   returns the ascii value of the first bytes of the string
  9243.   `s'.  If `s' is Double_Type, `int' truncates the
  9244.   number to an integer and returns it.
  9245.  
  9246.  EXAMPLE
  9247.   `int' can be used to convert single byte strings to
  9248.   integers.  As an example, the intrinsic function `isdigit' may
  9249.   be defined as
  9250.  
  9251.     define isdigit (s)
  9252.     {
  9253.       if ((int (s) >= '0') and (int (s) <= '9')) return 1;
  9254.       return 0;
  9255.     }
  9256.  
  9257.  
  9258.  NOTES
  9259.   This function is equivalent to `typecast (s, Integer_Type)';
  9260.  
  9261.  SEE ALSO
  9262.   typecast, double, integer, char, isdigit
  9263.  
  9264. --------------------------------------------------------------
  9265.  
  9266. integer
  9267.  
  9268.  SYNOPSIS
  9269.   Convert a string to an integer
  9270.  
  9271.  USAGE
  9272.   Integer_Type integer (String_Type s)
  9273.  
  9274.  DESCRIPTION
  9275.   The `integer' function converts a string representation of an
  9276.   integer back to an integer.  If the string does not form a valid
  9277.   integer, a SyntaxError will be thrown.
  9278.  
  9279.  EXAMPLE
  9280.   `integer ("1234")' returns the integer value `1234'.
  9281.  
  9282.  NOTES
  9283.   This function operates only on strings and is not the same as the
  9284.   more general `typecast' operator.
  9285.  
  9286.  SEE ALSO
  9287.   typecast, _slang_guess_type, string, sprintf, char
  9288.  
  9289. --------------------------------------------------------------
  9290.  
  9291. isdigit
  9292.  
  9293.  SYNOPSIS
  9294.   Tests for a decimal digit character
  9295.  
  9296.  USAGE
  9297.   Integer_Type isdigit (s)
  9298.  
  9299.  DESCRIPTION
  9300.   This function returns a non-zero value if the character represented
  9301.   by `s' is a digit; otherwise, it returns zero.  If `s' is
  9302.   a string, the first character of `s' will be used for the test.
  9303.  
  9304.  EXAMPLE
  9305.   A simple, user defined implementation of `isdigit' is
  9306.  
  9307.     define isdigit (x)
  9308.     {
  9309.        return ((x <= '9') and (x >= '0'));
  9310.     }
  9311.  
  9312.   However, the intrinsic function `isdigit' executes many times faster
  9313.   than the representation defined above, and works properly when
  9314.   `x' is a Unicode character.
  9315.  
  9316.  SEE ALSO
  9317.   int, integer
  9318.  
  9319. --------------------------------------------------------------
  9320.  
  9321. _slang_guess_type
  9322.  
  9323.  SYNOPSIS
  9324.   Guess the data type that a string represents
  9325.  
  9326.  USAGE
  9327.   DataType_Type _slang_guess_type (String_Type s)
  9328.  
  9329.  DESCRIPTION
  9330.   This function tries to determine whether its argument `s'
  9331.   represents an integer (short, int, long), floating point (float,
  9332.   double), or a complex number.  If it appears to be none of these,
  9333.   then a string is assumed.  It returns one of the following values
  9334.   depending on the format of the string `s':
  9335.  
  9336.     Short_Type     :  short integer           (e.g., "2h")
  9337.     UShort_Type    :  unsigned short integer  (e.g., "2hu")
  9338.     Integer_Type   :  integer                 (e.g., "2")
  9339.     UInteger_Type  :  unsigned integer        (e.g., "2")
  9340.     Long_Type      :  long integer            (e.g., "2l")
  9341.     ULong_Type     :  unsigned long integer   (e.g., "2l")
  9342.     Float_Type     :  float                   (e.g., "2.0f")
  9343.     Double_Type    :  double                  (e.g., "2.0")
  9344.     Complex_Type   :  imaginary               (e.g., "2i")
  9345.     String_Type    :  Anything else.          (e.g., "2foo")
  9346.  
  9347.   For example, `_slang_guess_type("1e2")' returns
  9348.   Double_Type but `_slang_guess_type("e12")' returns
  9349.   String_Type.
  9350.  
  9351.  SEE ALSO
  9352.   integer, string, double, atof, __is_datatype_numeric
  9353.  
  9354. --------------------------------------------------------------
  9355.  
  9356. string
  9357.  
  9358.  SYNOPSIS
  9359.   Convert an object to a string representation.
  9360.  
  9361.  USAGE
  9362.   String_Type string (obj)
  9363.  
  9364.  DESCRIPTION
  9365.    The `string' function may be used to convert an object
  9366.    `obj' of any type to its string representation.
  9367.    For example, `string(12.34)' returns `"12.34"'.
  9368.  
  9369.  EXAMPLE
  9370.  
  9371.      define print_anything (anything)
  9372.      {
  9373.         message (string (anything));
  9374.      }
  9375.  
  9376.  
  9377.  NOTES
  9378.    This function is _not_ the same as typecasting to a String_Type
  9379.    using the `typecast' function.
  9380.  
  9381.  SEE ALSO
  9382.   typecast, sprintf, integer, char
  9383.  
  9384. --------------------------------------------------------------
  9385.  
  9386. tolower
  9387.  
  9388.  SYNOPSIS
  9389.   Convert a character to lowercase.
  9390.  
  9391.  USAGE
  9392.   Integer_Type lower (Integer_Type ch)
  9393.  
  9394.  DESCRIPTION
  9395.   This function takes an integer `ch' and returns its lowercase
  9396.   equivalent.
  9397.  
  9398.  SEE ALSO
  9399.   toupper, strup, strlow, int, char, define_case
  9400.  
  9401. --------------------------------------------------------------
  9402.  
  9403. toupper
  9404.  
  9405.  SYNOPSIS
  9406.   Convert a character to uppercase.
  9407.  
  9408.  USAGE
  9409.   Integer_Type toupper (Integer_Type ch)
  9410.  
  9411.  DESCRIPTION
  9412.   This function takes an integer `ch' and returns its uppercase
  9413.   equivalent.
  9414.  
  9415.  SEE ALSO
  9416.   tolower, strup, strlow, int, char, define_case
  9417.  
  9418. --------------------------------------------------------------
  9419.  
  9420. typecast
  9421.  
  9422.  SYNOPSIS
  9423.   Convert an object from one data type to another.
  9424.  
  9425.  USAGE
  9426.   typecast (x, new_type)
  9427.  
  9428.  DESCRIPTION
  9429.   The `typecast' function performs a generic typecast operation on
  9430.   `x' to convert it to `new_type'.  If `x' represents an
  9431.   array, the function will attempt to convert all elements of `x'
  9432.   to `new_type'.  Not all objects can be converted and a
  9433.   type-mismatch error will result upon failure.
  9434.  
  9435.  EXAMPLE
  9436.  
  9437.     define to_complex (x)
  9438.     {
  9439.        return typecast (x, Complex_Type);
  9440.     }
  9441.  
  9442.   defines a function that converts its argument, `x' to a complex
  9443.   number.
  9444.  
  9445.  SEE ALSO
  9446.   int, double, typeof
  9447.  
  9448. --------------------------------------------------------------
  9449.  
  9450. _typeof
  9451.  
  9452.  SYNOPSIS
  9453.   Get the data type of an object
  9454.  
  9455.  USAGE
  9456.   DataType_Type _typeof (x)
  9457.  
  9458.  DESCRIPTION
  9459.   This function is similar to the `typeof' function except in the
  9460.   case of arrays.  If the object `x' is an array, then the data
  9461.   type of the array will be returned. otherwise `_typeof' returns
  9462.   the data type of `x'.
  9463.  
  9464.  EXAMPLE
  9465.  
  9466.     if (Integer_Type == _typeof (x))
  9467.       message ("x is an integer or an integer array");
  9468.  
  9469.  
  9470.  SEE ALSO
  9471.   typeof, array_info, _slang_guess_type, typecast
  9472.  
  9473. --------------------------------------------------------------
  9474.  
  9475. typeof
  9476.  
  9477.  SYNOPSIS
  9478.   Get the data type of an object
  9479.  
  9480.  USAGE
  9481.   DataType_Type typeof (x)
  9482.  
  9483.  DESCRIPTION
  9484.   This function returns the data type of `x'.
  9485.  
  9486.  EXAMPLE
  9487.  
  9488.   if (Integer_Type == typeof (x)) message ("x is an integer");
  9489.  
  9490.  
  9491.  SEE ALSO
  9492.   _typeof, is_struct_type, array_info, _slang_guess_type, typecast
  9493.  
  9494. --------------------------------------------------------------
  9495.